Analysis of stimulation experiments.

library(Seurat)
library(dplyr)
library(ggplot2)
library(scClustViz)
library(SeuratWrappers)
library(scCustomize)
library(reshape2)
library(viridis)
Loading required package: viridisLite

Load integrated object. This object has been integrated with CCA, because there was lots of batch effect between the 0hr tissue and the other two experiments (which merged quite well).

load("~/Dropbox/Zoe/scf_version/analysis/healthy_sc/seurat_objects/no_dropletQC/3391/integrated_3391_stimulation_pmaio_unstim_downsampled_cca_kanchor5_scClustViz.RData")
# Set identity
Idents(scSeurat) <- "integrated_snn_res.0.4"

UMAPs

Check out the UMAP of clusters, original identities, and refined SCINA labels.

DimPlot(scSeurat, label = TRUE)

DimPlot(scSeurat, group.by = "tissue_type", label = FALSE)

DimPlot(scSeurat, group.by = "scina_labels", label = TRUE) & NoLegend()

pdf(file = './figures/stimulation/downsampled_tissue_type_UMAP.pdf',
    height = 5, width = 7)
DimPlot(scSeurat, group.by = "tissue_type") +
  ggtitle(NULL)
dev.off()
null device 
          1 

Create UMAP of general cell-type labels

Barplot of tissue type

Look at tissue-type per cluster on a proportional level:

pt <- table(scSeurat$general_cell_labels_clusts, scSeurat$tissue_type)
pt <- as.data.frame(pt)
plot <- ggplot(pt, aes(x = Var1, y = Freq, fill = Var2)) +
  theme_bw(base_size = 15) +
  geom_col(position = "fill", width = 0.5) +
  xlab("Cluster") +
  ylab("Proportion") +
  theme(legend.title = element_blank(),
        legend.position = "top")
#print(plot, vp = viewport(angle = 90))
plot + coord_flip()
pdf(file = './figures/stimulation/downsampled_tissue_type_barplot.pdf',
    height = 5, width = 7)
plot + coord_flip()
dev.off()

DE gene testing

Calculate all DE genes

all.markers <- FindAllMarkers(scSeurat,
                              only.pos = TRUE,
                              min.pct = 0.25, 
                              logfc.threshold = 0.25,
                              recorrect_umi = FALSE)
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~05s          
  |++                                                | 2 % ~05s          
  |++                                                | 3 % ~05s          
  |+++                                               | 4 % ~05s          
  |+++                                               | 5 % ~05s          
  |++++                                              | 6 % ~05s          
  |++++                                              | 7 % ~05s          
  |+++++                                             | 8 % ~05s          
  |+++++                                             | 9 % ~05s          
  |++++++                                            | 11% ~05s          
  |++++++                                            | 12% ~04s          
  |+++++++                                           | 13% ~04s          
  |+++++++                                           | 14% ~04s          
  |++++++++                                          | 15% ~04s          
  |++++++++                                          | 16% ~04s          
  |+++++++++                                         | 17% ~04s          
  |+++++++++                                         | 18% ~04s          
  |++++++++++                                        | 19% ~04s          
  |++++++++++                                        | 20% ~04s          
  |+++++++++++                                       | 21% ~04s          
  |++++++++++++                                      | 22% ~04s          
  |++++++++++++                                      | 23% ~04s          
  |+++++++++++++                                     | 24% ~04s          
  |+++++++++++++                                     | 25% ~04s          
  |++++++++++++++                                    | 26% ~04s          
  |++++++++++++++                                    | 27% ~04s          
  |+++++++++++++++                                   | 28% ~04s          
  |+++++++++++++++                                   | 29% ~04s          
  |++++++++++++++++                                  | 31% ~04s          
  |++++++++++++++++                                  | 32% ~04s          
  |+++++++++++++++++                                 | 33% ~03s          
  |+++++++++++++++++                                 | 34% ~03s          
  |++++++++++++++++++                                | 35% ~03s          
  |++++++++++++++++++                                | 36% ~03s          
  |+++++++++++++++++++                               | 37% ~03s          
  |+++++++++++++++++++                               | 38% ~03s          
  |++++++++++++++++++++                              | 39% ~03s          
  |++++++++++++++++++++                              | 40% ~03s          
  |+++++++++++++++++++++                             | 41% ~03s          
  |++++++++++++++++++++++                            | 42% ~03s          
  |++++++++++++++++++++++                            | 43% ~03s          
  |+++++++++++++++++++++++                           | 44% ~03s          
  |+++++++++++++++++++++++                           | 45% ~03s          
  |++++++++++++++++++++++++                          | 46% ~03s          
  |++++++++++++++++++++++++                          | 47% ~03s          
  |+++++++++++++++++++++++++                         | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |++++++++++++++++++++++++++                        | 52% ~02s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |+++++++++++++++++++++++++++                       | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |++++++++++++++++++++++++++++                      | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |+++++++++++++++++++++++++++++                     | 58% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |++++++++++++++++++++++++++++++                    | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 61% ~02s          
  |++++++++++++++++++++++++++++++++                  | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
  |++++++++++++++++++++++++++++++++++                | 66% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~06s          
  |++                                                | 2 % ~06s          
  |++                                                | 4 % ~06s          
  |+++                                               | 5 % ~06s          
  |+++                                               | 6 % ~06s          
  |++++                                              | 7 % ~06s          
  |+++++                                             | 8 % ~06s          
  |+++++                                             | 10% ~06s          
  |++++++                                            | 11% ~06s          
  |++++++                                            | 12% ~06s          
  |+++++++                                           | 13% ~06s          
  |++++++++                                          | 14% ~06s          
  |++++++++                                          | 15% ~05s          
  |+++++++++                                         | 17% ~05s          
  |+++++++++                                         | 18% ~05s          
  |++++++++++                                        | 19% ~05s          
  |+++++++++++                                       | 20% ~05s          
  |+++++++++++                                       | 21% ~05s          
  |++++++++++++                                      | 23% ~05s          
  |++++++++++++                                      | 24% ~05s          
  |+++++++++++++                                     | 25% ~05s          
  |++++++++++++++                                    | 26% ~05s          
  |++++++++++++++                                    | 27% ~05s          
  |+++++++++++++++                                   | 29% ~05s          
  |+++++++++++++++                                   | 30% ~05s          
  |++++++++++++++++                                  | 31% ~04s          
  |+++++++++++++++++                                 | 32% ~04s          
  |+++++++++++++++++                                 | 33% ~04s          
  |++++++++++++++++++                                | 35% ~04s          
  |++++++++++++++++++                                | 36% ~04s          
  |+++++++++++++++++++                               | 37% ~04s          
  |++++++++++++++++++++                              | 38% ~04s          
  |++++++++++++++++++++                              | 39% ~04s          
  |+++++++++++++++++++++                             | 40% ~04s          
  |+++++++++++++++++++++                             | 42% ~04s          
  |++++++++++++++++++++++                            | 43% ~04s          
  |+++++++++++++++++++++++                           | 44% ~04s          
  |+++++++++++++++++++++++                           | 45% ~04s          
  |++++++++++++++++++++++++                          | 46% ~03s          
  |++++++++++++++++++++++++                          | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |+++++++++++++++++++++++++                         | 50% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |+++++++++++++++++++++++++++                       | 52% ~03s          
  |+++++++++++++++++++++++++++                       | 54% ~03s          
  |++++++++++++++++++++++++++++                      | 55% ~03s          
  |++++++++++++++++++++++++++++                      | 56% ~03s          
  |+++++++++++++++++++++++++++++                     | 57% ~03s          
  |++++++++++++++++++++++++++++++                    | 58% ~03s          
  |++++++++++++++++++++++++++++++                    | 60% ~03s          
  |+++++++++++++++++++++++++++++++                   | 61% ~03s          
  |+++++++++++++++++++++++++++++++                   | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |++++++++++++++++++++++++++++++++++                | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=06s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~03s          
  |++                                                | 2 % ~03s          
  |++                                                | 4 % ~03s          
  |+++                                               | 5 % ~03s          
  |+++                                               | 6 % ~03s          
  |++++                                              | 7 % ~03s          
  |+++++                                             | 8 % ~03s          
  |+++++                                             | 10% ~03s          
  |++++++                                            | 11% ~03s          
  |++++++                                            | 12% ~03s          
  |+++++++                                           | 13% ~03s          
  |++++++++                                          | 14% ~03s          
  |++++++++                                          | 15% ~03s          
  |+++++++++                                         | 17% ~03s          
  |+++++++++                                         | 18% ~03s          
  |++++++++++                                        | 19% ~03s          
  |+++++++++++                                       | 20% ~02s          
  |+++++++++++                                       | 21% ~02s          
  |++++++++++++                                      | 23% ~02s          
  |++++++++++++                                      | 24% ~02s          
  |+++++++++++++                                     | 25% ~02s          
  |++++++++++++++                                    | 26% ~02s          
  |++++++++++++++                                    | 27% ~02s          
  |+++++++++++++++                                   | 29% ~02s          
  |+++++++++++++++                                   | 30% ~02s          
  |++++++++++++++++                                  | 31% ~02s          
  |+++++++++++++++++                                 | 32% ~02s          
  |+++++++++++++++++                                 | 33% ~02s          
  |++++++++++++++++++                                | 35% ~02s          
  |++++++++++++++++++                                | 36% ~02s          
  |+++++++++++++++++++                               | 37% ~02s          
  |++++++++++++++++++++                              | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |+++++++++++++++++++++                             | 40% ~02s          
  |+++++++++++++++++++++                             | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++                           | 44% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |++++++++++++++++++++++++                          | 46% ~02s          
  |++++++++++++++++++++++++                          | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |+++++++++++++++++++++++++                         | 50% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~02s          
  |+++++++++++++++++++++++++++                       | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |++++++++++++++++++++++++++++                      | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++                    | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~07s          
  |++                                                | 2 % ~07s          
  |++                                                | 3 % ~06s          
  |+++                                               | 5 % ~06s          
  |+++                                               | 6 % ~06s          
  |++++                                              | 7 % ~06s          
  |+++++                                             | 8 % ~06s          
  |+++++                                             | 9 % ~06s          
  |++++++                                            | 10% ~06s          
  |++++++                                            | 11% ~06s          
  |+++++++                                           | 13% ~06s          
  |+++++++                                           | 14% ~06s          
  |++++++++                                          | 15% ~06s          
  |+++++++++                                         | 16% ~06s          
  |+++++++++                                         | 17% ~06s          
  |++++++++++                                        | 18% ~05s          
  |++++++++++                                        | 20% ~05s          
  |+++++++++++                                       | 21% ~05s          
  |+++++++++++                                       | 22% ~05s          
  |++++++++++++                                      | 23% ~05s          
  |+++++++++++++                                     | 24% ~05s          
  |+++++++++++++                                     | 25% ~05s          
  |++++++++++++++                                    | 26% ~05s          
  |++++++++++++++                                    | 28% ~05s          
  |+++++++++++++++                                   | 29% ~05s          
  |+++++++++++++++                                   | 30% ~05s          
  |++++++++++++++++                                  | 31% ~05s          
  |+++++++++++++++++                                 | 32% ~05s          
  |+++++++++++++++++                                 | 33% ~04s          
  |++++++++++++++++++                                | 34% ~04s          
  |++++++++++++++++++                                | 36% ~04s          
  |+++++++++++++++++++                               | 37% ~04s          
  |+++++++++++++++++++                               | 38% ~04s          
  |++++++++++++++++++++                              | 39% ~04s          
  |+++++++++++++++++++++                             | 40% ~04s          
  |+++++++++++++++++++++                             | 41% ~04s          
  |++++++++++++++++++++++                            | 43% ~04s          
  |++++++++++++++++++++++                            | 44% ~04s          
  |+++++++++++++++++++++++                           | 45% ~04s          
  |+++++++++++++++++++++++                           | 46% ~04s          
  |++++++++++++++++++++++++                          | 47% ~04s          
  |+++++++++++++++++++++++++                         | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |++++++++++++++++++++++++++                        | 52% ~03s          
  |+++++++++++++++++++++++++++                       | 53% ~03s          
  |++++++++++++++++++++++++++++                      | 54% ~03s          
  |++++++++++++++++++++++++++++                      | 55% ~03s          
  |+++++++++++++++++++++++++++++                     | 56% ~03s          
  |+++++++++++++++++++++++++++++                     | 57% ~03s          
  |++++++++++++++++++++++++++++++                    | 59% ~03s          
  |++++++++++++++++++++++++++++++                    | 60% ~03s          
  |+++++++++++++++++++++++++++++++                   | 61% ~03s          
  |++++++++++++++++++++++++++++++++                  | 62% ~03s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |++++++++++++++++++++++++++++++++++                | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=07s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~04s          
  |++                                                | 3 % ~04s          
  |++                                                | 4 % ~04s          
  |+++                                               | 5 % ~03s          
  |++++                                              | 7 % ~03s          
  |++++                                              | 8 % ~03s          
  |+++++                                             | 9 % ~03s          
  |++++++                                            | 11% ~03s          
  |++++++                                            | 12% ~03s          
  |+++++++                                           | 13% ~03s          
  |++++++++                                          | 14% ~03s          
  |++++++++                                          | 16% ~03s          
  |+++++++++                                         | 17% ~03s          
  |++++++++++                                        | 18% ~03s          
  |++++++++++                                        | 20% ~03s          
  |+++++++++++                                       | 21% ~03s          
  |++++++++++++                                      | 22% ~03s          
  |++++++++++++                                      | 24% ~03s          
  |+++++++++++++                                     | 25% ~03s          
  |++++++++++++++                                    | 26% ~03s          
  |++++++++++++++                                    | 28% ~03s          
  |+++++++++++++++                                   | 29% ~03s          
  |++++++++++++++++                                  | 30% ~03s          
  |++++++++++++++++                                  | 32% ~03s          
  |+++++++++++++++++                                 | 33% ~02s          
  |++++++++++++++++++                                | 34% ~02s          
  |++++++++++++++++++                                | 36% ~02s          
  |+++++++++++++++++++                               | 37% ~02s          
  |++++++++++++++++++++                              | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |++++++++++++++++++++++++                          | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |+++++++++++++++++++++++++                         | 50% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~02s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |+++++++++++++++++++++++++++                       | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |+++++++++++++++++++++++++++++                     | 58% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~09s          
  |++                                                | 2 % ~09s          
  |++                                                | 3 % ~09s          
  |+++                                               | 4 % ~09s          
  |+++                                               | 5 % ~09s          
  |++++                                              | 7 % ~09s          
  |++++                                              | 8 % ~09s          
  |+++++                                             | 9 % ~09s          
  |+++++                                             | 10% ~09s          
  |++++++                                            | 11% ~09s          
  |+++++++                                           | 12% ~09s          
  |+++++++                                           | 13% ~09s          
  |++++++++                                          | 14% ~08s          
  |++++++++                                          | 15% ~08s          
  |+++++++++                                         | 16% ~08s          
  |+++++++++                                         | 18% ~08s          
  |++++++++++                                        | 19% ~08s          
  |++++++++++                                        | 20% ~08s          
  |+++++++++++                                       | 21% ~08s          
  |+++++++++++                                       | 22% ~08s          
  |++++++++++++                                      | 23% ~08s          
  |+++++++++++++                                     | 24% ~07s          
  |+++++++++++++                                     | 25% ~07s          
  |++++++++++++++                                    | 26% ~07s          
  |++++++++++++++                                    | 27% ~07s          
  |+++++++++++++++                                   | 29% ~07s          
  |+++++++++++++++                                   | 30% ~07s          
  |++++++++++++++++                                  | 31% ~07s          
  |++++++++++++++++                                  | 32% ~07s          
  |+++++++++++++++++                                 | 33% ~07s          
  |++++++++++++++++++                                | 34% ~06s          
  |++++++++++++++++++                                | 35% ~06s          
  |+++++++++++++++++++                               | 36% ~06s          
  |+++++++++++++++++++                               | 37% ~06s          
  |++++++++++++++++++++                              | 38% ~06s          
  |++++++++++++++++++++                              | 40% ~06s          
  |+++++++++++++++++++++                             | 41% ~06s          
  |+++++++++++++++++++++                             | 42% ~06s          
  |++++++++++++++++++++++                            | 43% ~06s          
  |++++++++++++++++++++++                            | 44% ~06s          
  |+++++++++++++++++++++++                           | 45% ~05s          
  |++++++++++++++++++++++++                          | 46% ~05s          
  |++++++++++++++++++++++++                          | 47% ~05s          
  |+++++++++++++++++++++++++                         | 48% ~05s          
  |+++++++++++++++++++++++++                         | 49% ~05s          
  |++++++++++++++++++++++++++                        | 51% ~05s          
  |++++++++++++++++++++++++++                        | 52% ~05s          
  |+++++++++++++++++++++++++++                       | 53% ~05s          
  |+++++++++++++++++++++++++++                       | 54% ~05s          
  |++++++++++++++++++++++++++++                      | 55% ~04s          
  |+++++++++++++++++++++++++++++                     | 56% ~04s          
  |+++++++++++++++++++++++++++++                     | 57% ~04s          
  |++++++++++++++++++++++++++++++                    | 58% ~04s          
  |++++++++++++++++++++++++++++++                    | 59% ~04s          
  |+++++++++++++++++++++++++++++++                   | 60% ~04s          
  |+++++++++++++++++++++++++++++++                   | 62% ~04s          
  |++++++++++++++++++++++++++++++++                  | 63% ~04s          
  |++++++++++++++++++++++++++++++++                  | 64% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
  |++++++++++++++++++++++++++++++++++                | 67% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=10s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~07s          
  |++                                                | 2 % ~07s          
  |++                                                | 4 % ~06s          
  |+++                                               | 5 % ~06s          
  |+++                                               | 6 % ~06s          
  |++++                                              | 7 % ~06s          
  |+++++                                             | 8 % ~06s          
  |+++++                                             | 9 % ~06s          
  |++++++                                            | 11% ~06s          
  |++++++                                            | 12% ~06s          
  |+++++++                                           | 13% ~06s          
  |++++++++                                          | 14% ~06s          
  |++++++++                                          | 15% ~06s          
  |+++++++++                                         | 16% ~05s          
  |+++++++++                                         | 18% ~05s          
  |++++++++++                                        | 19% ~05s          
  |++++++++++                                        | 20% ~05s          
  |+++++++++++                                       | 21% ~05s          
  |++++++++++++                                      | 22% ~05s          
  |++++++++++++                                      | 24% ~05s          
  |+++++++++++++                                     | 25% ~05s          
  |+++++++++++++                                     | 26% ~05s          
  |++++++++++++++                                    | 27% ~05s          
  |+++++++++++++++                                   | 28% ~05s          
  |+++++++++++++++                                   | 29% ~05s          
  |++++++++++++++++                                  | 31% ~05s          
  |++++++++++++++++                                  | 32% ~05s          
  |+++++++++++++++++                                 | 33% ~04s          
  |++++++++++++++++++                                | 34% ~04s          
  |++++++++++++++++++                                | 35% ~04s          
  |+++++++++++++++++++                               | 36% ~04s          
  |+++++++++++++++++++                               | 38% ~04s          
  |++++++++++++++++++++                              | 39% ~04s          
  |++++++++++++++++++++                              | 40% ~04s          
  |+++++++++++++++++++++                             | 41% ~04s          
  |++++++++++++++++++++++                            | 42% ~04s          
  |++++++++++++++++++++++                            | 44% ~04s          
  |+++++++++++++++++++++++                           | 45% ~04s          
  |+++++++++++++++++++++++                           | 46% ~04s          
  |++++++++++++++++++++++++                          | 47% ~04s          
  |+++++++++++++++++++++++++                         | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |++++++++++++++++++++++++++                        | 52% ~03s          
  |+++++++++++++++++++++++++++                       | 53% ~03s          
  |++++++++++++++++++++++++++++                      | 54% ~03s          
  |++++++++++++++++++++++++++++                      | 55% ~03s          
  |+++++++++++++++++++++++++++++                     | 56% ~03s          
  |+++++++++++++++++++++++++++++                     | 58% ~03s          
  |++++++++++++++++++++++++++++++                    | 59% ~03s          
  |++++++++++++++++++++++++++++++                    | 60% ~03s          
  |+++++++++++++++++++++++++++++++                   | 61% ~03s          
  |++++++++++++++++++++++++++++++++                  | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 64% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=07s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~05s          
  |++                                                | 2 % ~05s          
  |++                                                | 4 % ~05s          
  |+++                                               | 5 % ~05s          
  |++++                                              | 6 % ~05s          
  |++++                                              | 7 % ~05s          
  |+++++                                             | 9 % ~05s          
  |+++++                                             | 10% ~05s          
  |++++++                                            | 11% ~05s          
  |+++++++                                           | 12% ~05s          
  |+++++++                                           | 13% ~05s          
  |++++++++                                          | 15% ~05s          
  |++++++++                                          | 16% ~04s          
  |+++++++++                                         | 17% ~04s          
  |++++++++++                                        | 18% ~04s          
  |++++++++++                                        | 20% ~04s          
  |+++++++++++                                       | 21% ~04s          
  |+++++++++++                                       | 22% ~04s          
  |++++++++++++                                      | 23% ~04s          
  |+++++++++++++                                     | 24% ~04s          
  |+++++++++++++                                     | 26% ~04s          
  |++++++++++++++                                    | 27% ~04s          
  |+++++++++++++++                                   | 28% ~04s          
  |+++++++++++++++                                   | 29% ~04s          
  |++++++++++++++++                                  | 30% ~04s          
  |++++++++++++++++                                  | 32% ~04s          
  |+++++++++++++++++                                 | 33% ~04s          
  |++++++++++++++++++                                | 34% ~04s          
  |++++++++++++++++++                                | 35% ~04s          
  |+++++++++++++++++++                               | 37% ~03s          
  |+++++++++++++++++++                               | 38% ~03s          
  |++++++++++++++++++++                              | 39% ~03s          
  |+++++++++++++++++++++                             | 40% ~03s          
  |+++++++++++++++++++++                             | 41% ~03s          
  |++++++++++++++++++++++                            | 43% ~03s          
  |++++++++++++++++++++++                            | 44% ~03s          
  |+++++++++++++++++++++++                           | 45% ~03s          
  |++++++++++++++++++++++++                          | 46% ~03s          
  |++++++++++++++++++++++++                          | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |+++++++++++++++++++++++++                         | 50% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |+++++++++++++++++++++++++++                       | 52% ~03s          
  |+++++++++++++++++++++++++++                       | 54% ~03s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |++++++++++++++++++++++++++++++                    | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 61% ~02s          
  |++++++++++++++++++++++++++++++++                  | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~04s          
  |++                                                | 2 % ~04s          
  |++                                                | 3 % ~04s          
  |+++                                               | 4 % ~04s          
  |+++                                               | 5 % ~04s          
  |++++                                              | 6 % ~04s          
  |++++                                              | 7 % ~04s          
  |+++++                                             | 8 % ~04s          
  |+++++                                             | 9 % ~04s          
  |++++++                                            | 10% ~04s          
  |++++++                                            | 11% ~04s          
  |+++++++                                           | 12% ~04s          
  |+++++++                                           | 13% ~04s          
  |++++++++                                          | 14% ~04s          
  |++++++++                                          | 15% ~04s          
  |+++++++++                                         | 16% ~04s          
  |+++++++++                                         | 17% ~03s          
  |++++++++++                                        | 18% ~03s          
  |++++++++++                                        | 19% ~03s          
  |+++++++++++                                       | 20% ~03s          
  |+++++++++++                                       | 21% ~03s          
  |++++++++++++                                      | 22% ~03s          
  |++++++++++++                                      | 23% ~03s          
  |+++++++++++++                                     | 24% ~03s          
  |+++++++++++++                                     | 26% ~03s          
  |++++++++++++++                                    | 27% ~03s          
  |++++++++++++++                                    | 28% ~03s          
  |+++++++++++++++                                   | 29% ~03s          
  |+++++++++++++++                                   | 30% ~03s          
  |++++++++++++++++                                  | 31% ~03s          
  |++++++++++++++++                                  | 32% ~03s          
  |+++++++++++++++++                                 | 33% ~03s          
  |+++++++++++++++++                                 | 34% ~03s          
  |++++++++++++++++++                                | 35% ~03s          
  |++++++++++++++++++                                | 36% ~03s          
  |+++++++++++++++++++                               | 37% ~03s          
  |+++++++++++++++++++                               | 38% ~03s          
  |++++++++++++++++++++                              | 39% ~02s          
  |++++++++++++++++++++                              | 40% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |+++++++++++++++++++++                             | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |++++++++++++++++++++++                            | 44% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |+++++++++++++++++++++++                           | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |++++++++++++++++++++++++                          | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |+++++++++++++++++++++++++                         | 50% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~02s          
  |+++++++++++++++++++++++++++                       | 52% ~02s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |++++++++++++++++++++++++++++                      | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |++++++++++++++++++++++++++++++                    | 58% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |+++++++++++++++++++++++++++++++                   | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 61% ~02s          
  |++++++++++++++++++++++++++++++++                  | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~05s          
  |++                                                | 2 % ~05s          
  |++                                                | 3 % ~05s          
  |+++                                               | 5 % ~05s          
  |+++                                               | 6 % ~05s          
  |++++                                              | 7 % ~05s          
  |+++++                                             | 8 % ~05s          
  |+++++                                             | 9 % ~05s          
  |++++++                                            | 10% ~05s          
  |++++++                                            | 11% ~05s          
  |+++++++                                           | 13% ~05s          
  |+++++++                                           | 14% ~04s          
  |++++++++                                          | 15% ~04s          
  |+++++++++                                         | 16% ~04s          
  |+++++++++                                         | 17% ~04s          
  |++++++++++                                        | 18% ~04s          
  |++++++++++                                        | 20% ~04s          
  |+++++++++++                                       | 21% ~04s          
  |+++++++++++                                       | 22% ~04s          
  |++++++++++++                                      | 23% ~04s          
  |+++++++++++++                                     | 24% ~04s          
  |+++++++++++++                                     | 25% ~04s          
  |++++++++++++++                                    | 26% ~04s          
  |++++++++++++++                                    | 28% ~04s          
  |+++++++++++++++                                   | 29% ~04s          
  |+++++++++++++++                                   | 30% ~04s          
  |++++++++++++++++                                  | 31% ~04s          
  |+++++++++++++++++                                 | 32% ~04s          
  |+++++++++++++++++                                 | 33% ~03s          
  |++++++++++++++++++                                | 34% ~03s          
  |++++++++++++++++++                                | 36% ~03s          
  |+++++++++++++++++++                               | 37% ~03s          
  |+++++++++++++++++++                               | 38% ~03s          
  |++++++++++++++++++++                              | 39% ~03s          
  |+++++++++++++++++++++                             | 40% ~03s          
  |+++++++++++++++++++++                             | 41% ~03s          
  |++++++++++++++++++++++                            | 43% ~03s          
  |++++++++++++++++++++++                            | 44% ~03s          
  |+++++++++++++++++++++++                           | 45% ~03s          
  |+++++++++++++++++++++++                           | 46% ~03s          
  |++++++++++++++++++++++++                          | 47% ~03s          
  |+++++++++++++++++++++++++                         | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |++++++++++++++++++++++++++                        | 52% ~03s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |++++++++++++++++++++++++++++                      | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |++++++++++++++++++++++++++++++                    | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 61% ~02s          
  |++++++++++++++++++++++++++++++++                  | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
  |++++++++++++++++++++++++++++++++++                | 67% ~02s          
  |++++++++++++++++++++++++++++++++++                | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~03s          
  |++                                                | 3 % ~03s          
  |+++                                               | 4 % ~02s          
  |+++                                               | 6 % ~02s          
  |++++                                              | 7 % ~02s          
  |+++++                                             | 8 % ~02s          
  |+++++                                             | 10% ~02s          
  |++++++                                            | 11% ~02s          
  |+++++++                                           | 13% ~02s          
  |++++++++                                          | 14% ~02s          
  |++++++++                                          | 15% ~02s          
  |+++++++++                                         | 17% ~02s          
  |++++++++++                                        | 18% ~02s          
  |++++++++++                                        | 20% ~02s          
  |+++++++++++                                       | 21% ~02s          
  |++++++++++++                                      | 23% ~02s          
  |++++++++++++                                      | 24% ~02s          
  |+++++++++++++                                     | 25% ~02s          
  |++++++++++++++                                    | 27% ~02s          
  |+++++++++++++++                                   | 28% ~02s          
  |+++++++++++++++                                   | 30% ~02s          
  |++++++++++++++++                                  | 31% ~02s          
  |+++++++++++++++++                                 | 32% ~02s          
  |+++++++++++++++++                                 | 34% ~02s          
  |++++++++++++++++++                                | 35% ~02s          
  |+++++++++++++++++++                               | 37% ~02s          
  |++++++++++++++++++++                              | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 42% ~01s          
  |++++++++++++++++++++++                            | 44% ~01s          
  |+++++++++++++++++++++++                           | 45% ~01s          
  |++++++++++++++++++++++++                          | 46% ~01s          
  |++++++++++++++++++++++++                          | 48% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s  
Calculating cluster 11

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~04s          
  |++                                                | 2 % ~04s          
  |++                                                | 4 % ~04s          
  |+++                                               | 5 % ~04s          
  |++++                                              | 6 % ~04s          
  |++++                                              | 7 % ~04s          
  |+++++                                             | 9 % ~04s          
  |+++++                                             | 10% ~04s          
  |++++++                                            | 11% ~04s          
  |+++++++                                           | 12% ~03s          
  |+++++++                                           | 14% ~03s          
  |++++++++                                          | 15% ~03s          
  |+++++++++                                         | 16% ~03s          
  |+++++++++                                         | 17% ~03s          
  |++++++++++                                        | 19% ~03s          
  |++++++++++                                        | 20% ~03s          
  |+++++++++++                                       | 21% ~03s          
  |++++++++++++                                      | 22% ~03s          
  |++++++++++++                                      | 23% ~03s          
  |+++++++++++++                                     | 25% ~03s          
  |+++++++++++++                                     | 26% ~03s          
  |++++++++++++++                                    | 27% ~03s          
  |+++++++++++++++                                   | 28% ~03s          
  |+++++++++++++++                                   | 30% ~03s          
  |++++++++++++++++                                  | 31% ~03s          
  |+++++++++++++++++                                 | 32% ~03s          
  |+++++++++++++++++                                 | 33% ~03s          
  |++++++++++++++++++                                | 35% ~03s          
  |++++++++++++++++++                                | 36% ~03s          
  |+++++++++++++++++++                               | 37% ~02s          
  |++++++++++++++++++++                              | 38% ~02s          
  |++++++++++++++++++++                              | 40% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |+++++++++++++++++++++                             | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++                           | 44% ~02s          
  |+++++++++++++++++++++++                           | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |+++++++++++++++++++++++++                         | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~02s          
  |++++++++++++++++++++++++++                        | 52% ~02s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |++++++++++++++++++++++++++++                      | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |++++++++++++++++++++++++++++++                    | 58% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |+++++++++++++++++++++++++++++++                   | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
Calculating cluster 12

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~10s          
  |++                                                | 2 % ~10s          
  |++                                                | 3 % ~09s          
  |+++                                               | 4 % ~09s          
  |+++                                               | 6 % ~09s          
  |++++                                              | 7 % ~09s          
  |++++                                              | 8 % ~09s          
  |+++++                                             | 9 % ~09s          
  |+++++                                             | 10% ~09s          
  |++++++                                            | 11% ~09s          
  |+++++++                                           | 12% ~09s          
  |+++++++                                           | 13% ~08s          
  |++++++++                                          | 14% ~08s          
  |++++++++                                          | 16% ~08s          
  |+++++++++                                         | 17% ~08s          
  |+++++++++                                         | 18% ~08s          
  |++++++++++                                        | 19% ~08s          
  |++++++++++                                        | 20% ~08s          
  |+++++++++++                                       | 21% ~08s          
  |++++++++++++                                      | 22% ~08s          
  |++++++++++++                                      | 23% ~07s          
  |+++++++++++++                                     | 24% ~07s          
  |+++++++++++++                                     | 26% ~07s          
  |++++++++++++++                                    | 27% ~07s          
  |++++++++++++++                                    | 28% ~07s          
  |+++++++++++++++                                   | 29% ~07s          
  |+++++++++++++++                                   | 30% ~07s          
  |++++++++++++++++                                  | 31% ~07s          
  |+++++++++++++++++                                 | 32% ~07s          
  |+++++++++++++++++                                 | 33% ~07s          
  |++++++++++++++++++                                | 34% ~06s          
  |++++++++++++++++++                                | 36% ~06s          
  |+++++++++++++++++++                               | 37% ~06s          
  |+++++++++++++++++++                               | 38% ~06s          
  |++++++++++++++++++++                              | 39% ~06s          
  |++++++++++++++++++++                              | 40% ~06s          
  |+++++++++++++++++++++                             | 41% ~06s          
  |++++++++++++++++++++++                            | 42% ~06s          
  |++++++++++++++++++++++                            | 43% ~06s          
  |+++++++++++++++++++++++                           | 44% ~05s          
  |+++++++++++++++++++++++                           | 46% ~05s          
  |++++++++++++++++++++++++                          | 47% ~05s          
  |++++++++++++++++++++++++                          | 48% ~05s          
  |+++++++++++++++++++++++++                         | 49% ~05s          
  |+++++++++++++++++++++++++                         | 50% ~05s          
  |++++++++++++++++++++++++++                        | 51% ~05s          
  |+++++++++++++++++++++++++++                       | 52% ~05s          
  |+++++++++++++++++++++++++++                       | 53% ~05s          
  |++++++++++++++++++++++++++++                      | 54% ~04s          
  |++++++++++++++++++++++++++++                      | 56% ~04s          
  |+++++++++++++++++++++++++++++                     | 57% ~04s          
  |+++++++++++++++++++++++++++++                     | 58% ~04s          
  |++++++++++++++++++++++++++++++                    | 59% ~04s          
  |++++++++++++++++++++++++++++++                    | 60% ~04s          
  |+++++++++++++++++++++++++++++++                   | 61% ~04s          
  |++++++++++++++++++++++++++++++++                  | 62% ~04s          
  |++++++++++++++++++++++++++++++++                  | 63% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~03s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
  |++++++++++++++++++++++++++++++++++                | 67% ~03s          
  |++++++++++++++++++++++++++++++++++                | 68% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=10s  
Calculating cluster 13

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~04s          
  |++                                                | 2 % ~04s          
  |++                                                | 3 % ~04s          
  |+++                                               | 4 % ~04s          
  |+++                                               | 5 % ~04s          
  |++++                                              | 6 % ~03s          
  |++++                                              | 7 % ~03s          
  |+++++                                             | 8 % ~03s          
  |+++++                                             | 9 % ~03s          
  |++++++                                            | 10% ~03s          
  |++++++                                            | 11% ~03s          
  |+++++++                                           | 12% ~03s          
  |+++++++                                           | 13% ~03s          
  |++++++++                                          | 14% ~03s          
  |++++++++                                          | 15% ~03s          
  |+++++++++                                         | 16% ~03s          
  |+++++++++                                         | 17% ~03s          
  |++++++++++                                        | 18% ~03s          
  |++++++++++                                        | 19% ~03s          
  |+++++++++++                                       | 20% ~03s          
  |+++++++++++                                       | 21% ~03s          
  |++++++++++++                                      | 22% ~03s          
  |++++++++++++                                      | 23% ~03s          
  |+++++++++++++                                     | 24% ~03s          
  |+++++++++++++                                     | 25% ~03s          
  |++++++++++++++                                    | 26% ~03s          
  |++++++++++++++                                    | 27% ~03s          
  |+++++++++++++++                                   | 28% ~03s          
  |+++++++++++++++                                   | 29% ~03s          
  |++++++++++++++++                                  | 30% ~03s          
  |++++++++++++++++                                  | 31% ~03s          
  |+++++++++++++++++                                 | 32% ~02s          
  |+++++++++++++++++                                 | 33% ~02s          
  |++++++++++++++++++                                | 34% ~02s          
  |++++++++++++++++++                                | 35% ~02s          
  |+++++++++++++++++++                               | 36% ~02s          
  |+++++++++++++++++++                               | 37% ~02s          
  |++++++++++++++++++++                              | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |+++++++++++++++++++++                             | 40% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++                           | 44% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |++++++++++++++++++++++++                          | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |+++++++++++++++++++++++++                         | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~02s          
  |++++++++++++++++++++++++++                        | 52% ~02s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |+++++++++++++++++++++++++++                       | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |++++++++++++++++++++++++++++                      | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |+++++++++++++++++++++++++++++                     | 58% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |++++++++++++++++++++++++++++++++                  | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
top.markers <- all.markers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_log2FC)
top.markers
write.table(all.markers,
            file = "./figures/stimulation/downsampled_cluster_markers.tsv",
            sep = "\t",
            quote = FALSE,
            row.names = FALSE)

Calculate DE genes: for each cluster, compare stim VS unstim

for (clust in levels(as.factor(Idents(scSeurat)))) {
  cells_stim <- colnames(scSeurat)[Idents(scSeurat) == clust & scSeurat$tissue_type == "6hrs_PMAIO"]
  cells_unstim <- colnames(scSeurat)[Idents(scSeurat) == clust & scSeurat$tissue_type == "6hrs_unstim"]
  markers <- RunPresto(scSeurat,
                       ident.1 = cells_stim,
                       ident.2 = cells_unstim,
                       only.pos = FALSE,
                       min.pct = 0.25,
                       logfc.threshold = 0.25,
                       recorrect_umi = FALSE)
  write.table(markers,
              file = paste("./figures/stimulation/downsampled_markers_cluster", 
                           clust ,"_stim_vs_unstim.tsv", sep = ""),
              sep = "\t",
              quote = FALSE,
              row.names = TRUE)
}

Get ranked gene lists

Get ranked gene lists for GSEA (T cells)

head(markers)
     gene                       avg_log2FC        
[1,] "CCL4L2;CCL4L1;CCL4"       "4.40154641525953"
[2,] "IFNG"                     "4.0151682490937" 
[3,] "CCL3L1;CCL3L3;CCL3;CCL18" "3.75101041204446"
[4,] "NR4A3"                    "3.4074616709271" 
[5,] "CD200"                    "3.19391411395955"
[6,] "CRTAM"                    "3.16249269872077"
write.table(markers,
            file = "./figures/stimulation/tcells_stim_vs_unstim.rnk",
            sep = "\t",
            quote = FALSE,
            row.names = FALSE,
            col.names = TRUE)

Get ranked gene lists for GSEA (Myeloid)

cells_stim <- colnames(scSeurat)[Idents(scSeurat) == 1 & scSeurat$tissue_type == "6hrs_PMAIO"]
cells_unstim <- colnames(scSeurat)[Idents(scSeurat) == 1 & scSeurat$tissue_type == "6hrs_unstim"]
markers <- RunPresto(scSeurat,
                     ident.1 = cells_stim,
                     ident.2 = cells_unstim,
                     only.pos = FALSE,
                     min.pct = 0,
                     logfc.threshold = 0,
                     recorrect_umi = FALSE)
# Sort by avg_log2FC
markers <- markers[order(-markers$avg_log2FC),]
# Only keep gene names and avg_log2FC
gene <- row.names(markers)
avg_log2FC <- markers[,'avg_log2FC']
markers <- cbind(gene, avg_log2FC)
head(markers)
     gene             avg_log2FC        
[1,] "SLAMF1"         "3.56875774068752"
[2,] "GBP2;GBP3;GBP1" "2.91284889293737"
[3,] "INSL5"          "2.89173412001122"
[4,] "IL31RA"         "2.79351227726075"
[5,] "PALLD"          "2.5829761675325" 
[6,] "SCIN"           "2.53732492892476"
write.table(markers,
            file = "./figures/stimulation/myeloid_stim_vs_unstim.rnk",
            sep = "\t",
            quote = FALSE,
            row.names = FALSE,
            col.names = TRUE)

Get ranked gene lists for GSEA (Myeloid VS Macs)

markers <- RunPresto(scSeurat,
                     ident.1 = monos,
                     ident.2 = macs,
                     only.pos = FALSE,
                     min.pct = 0,
                     logfc.threshold = 0,
                     recorrect_umi = FALSE)
# Sort by avg_log2FC
markers <- markers[order(-markers$avg_log2FC),]
# Only keep gene names and avg_log2FC
gene <- row.names(markers)
avg_log2FC <- markers[,'avg_log2FC']
markers <- cbind(gene, avg_log2FC)
head(markers)
     gene      avg_log2FC        
[1,] "ALDH1A2" "3.95903553652986"
[2,] "CCR7"    "3.41241239566538"
[3,] "CXCL8"   "3.28306538271737"
[4,] "CRLF2"   "3.19522144483049"
[5,] "PARP8"   "3.03665738136435"
[6,] "SLPI"    "3.03239503630385"
write.table(markers,
            file = "./figures/stimulation/monos_vs_macs.rnk",
            sep = "\t",
            quote = FALSE,
            row.names = FALSE,
            col.names = TRUE)

Feature visualization

Look for T-cell signatures.

FeaturePlot(scSeurat, features = c("CD3E", "NKG7"))

FeaturePlot(scSeurat, features = c("LEF1", "XCL1;XCL2"))

FeaturePlot(scSeurat, features = c("TOX", "CD8A"))

FeaturePlot(scSeurat, features = c("CCR7"))

Look for Th1 and Th2 signatures Th1: CD4, STAT4, Tbet, Tnfb, ifng Th2: CD4, GATA3, STAT6, IL 4/5/6/10/13

FeaturePlot(scSeurat, features = c("CD4", "STAT4"))

FeaturePlot(scSeurat, features = c("GATA3", "STAT6"))

FeaturePlot(scSeurat, features = c("IL4", "IL5"))

FeaturePlot(scSeurat, features = c("IL6", "IL10"))

FeaturePlot(scSeurat, features = c("IL13"))

Look for macrophage signatures:

FeaturePlot(scSeurat, features = c("LGALS1", "TYROBP"))

FeaturePlot(scSeurat, features = c("MARCO", "C1QC"))

FeaturePlot(scSeurat, features = c("LYZ-1", "S100A8"))

FeaturePlot(scSeurat, features = c("DEFA6;DEFA4;DEFA5", "CTSS"))

FeaturePlot(scSeurat, features = c("FLT3", "S100A12"))

Look for B and plasma cell signatures

FeaturePlot(scSeurat, features = c("CD79B", "JCHAIN"))

Cluster 12 is the only cluster that is obviously dominated by the unstimulated experiments. What cells are these? Looks like they are hepatocytes. A lot of the markers are periportal, but all hepatocytes are in this cluster.

# Isolate DE genes
clust11 <- sCVdata_list$res.0.4@DEvsRest$`12`[order(sCVdata_list$res.0.4@DEvsRest$`12`$Wstat,
                                                    decreasing = TRUE), ]
rownames(clust11)[1:50]
 [1] "PAH"                                      "LOC114082496"                             "TDO2"                                     "MAT1A"                                    "GYS2"                                    
 [6] "SLCO1B3;SLCO1B3-SLCO1B7;SLCO1B7;SLCO1B1"  "FBP1"                                     "CPS1"                                     "SLC2A2"                                   "ALDOB"                                   
[11] "MTSS1"                                    "IGFBP1"                                   "CYP3A4;CYP3A7-CYP3A51P;CYP3A7-2"          "mikado.WCK01-AAH20201022-F8-rsc00143G668" "PCK1"                                    
[16] "SHMT1"                                    "CYP3A4;CYP3A7-CYP3A51P;CYP3A7"            "ARG1"                                     "CYP3A4;CYP3A7-CYP3A51P;CYP3A7-3"          "LOC107139912"                            
[21] "ALB-1"                                    "SLC38A4"                                  "LOC107139914"                             "SORBS2"                                   "TAT"                                     
[26] "C5-1"                                     "KLKB1"                                    "Slc22a19-1"                               "G6PC1"                                    "RBP4"                                    
[31] "AGMO"                                     "HSD17B11"                                 "CMBL"                                     "SLC25A13"                                 "ZBTB16"                                  
[36] "C8G"                                      "PYGL"                                     "HSD11B1"                                  "mikado.WCK01-AAH20201022-F8-rsc00060G101" "CES3"                                    
[41] "MTARC2"                                   "IDO2"                                     "AQP9"                                     "ACACB"                                    "GOT1"                                    
[46] "CFI"                                      "NR1I2"                                    "ABCB11"                                   "SOX5"                                     "BHMT2"                                   
FeaturePlot(scSeurat, features = c("PAH","PCK1"))

FeaturePlot(scSeurat, features = c("CYP2E1","FETUB"))

FeaturePlot(scSeurat, features = c("ACACB","ELOVL6"))

FeaturePlot(scSeurat, features = c("POLR2D", "ALB-1"))

Let’s look at some of the key markers that Sonya sent: IL2, IL4, IL6, IL7, IL10, IL12A, TGFB

FeaturePlot(scSeurat, features = c("IL2", "IL4"))

FeaturePlot(scSeurat, features = c("IL6", "IL6-1"))

FeaturePlot(scSeurat, features = c("IL7", "IL10"))

FeaturePlot(scSeurat, features = c("IL12A", "TGFB1"))

It’s pretty hard to see which cytokines are expressed in which samples, so I’m going to try splitting up the samples.

DimPlot(scSeurat, split.by = "tissue_type", label = TRUE) & NoLegend()
pdf(file = './figures/stimulation/downsampled_UMAP_split.pdf',
    height = 4, width = 8)
DimPlot(scSeurat, split.by = "tissue_type", label = TRUE) & NoLegend()
dev.off()
png 
  2 

Now let’s take a look at the features on this split plot.

genes <- c("IL2","IL4","IL6","IL7","IL10","IL12A","TGFB1","TGFB2","TGFB3","TNF","IL18","IL2RA","CCL5","IFNG","LIF", "CCL3L1;CCL3L3;CCL3;CCL18","CCL4L2;CCL4L1;CCL4","NFKB1","ACTB","PTPRC","CD3E","TBP","SDHA")
for (gene in genes) {
  plots <- FeaturePlot_scCustom(scSeurat, feature = gene, split.by = "tissue_type",
                     colors_use = viridis_light_high)
  plot1 <- plots[[2]] + NoLegend() + labs(title = NULL)
  plot2 <- plots[[1]] + theme(axis.line.y = element_blank(),
                   axis.ticks.y = element_blank(),
                   axis.text.y = element_blank(),
                   axis.title.y = element_blank()) +
    labs(title = NULL)
  if (gene == "CCL3L1;CCL3L3;CCL3;CCL18" | gene == "CCL4L2;CCL4L1;CCL4") {
    plot2 <- plot2 + theme(legend.title = element_blank())
  }
  print(plot1 + plot2)
  #pdf(paste("figures/stimulation/downsampled_UMAP_split_", gene, ".pdf", sep = ""),
  #    height = 4, width = 8)
  #print(plot1 + plot2)
  #dev.off()
}
Warning: All cells have the same value (0) of “IL2”

Stim vs unstim heatmap

Look at the same features on a heatmap:

# Make ordered list of genes to visualise
genes <- c("DHX8","JMJD1C","ERBIN","TCF12","HNRNPA2B1","NFKB1","CCL3L1;CCL3L3;CCL3;CCL18","CCL4L2;CCL4L1;CCL4","CCL5",
           "TNF","IFNG","IL2RA","IL2","IL4","IL6","IL7","IL10")
# Looked for genes with high expression:
# sort(apply(scSeurat@assays$RNA@counts, 1, sum), decreasing = TRUE)[1:50]
# Other possible housekeeping genes: Sptssa, CHIC1, FNIP1 (?), DDX5, ZFAND3, HNRNPA2B1, JMJD1C, ERBIN
# TCF12, DHX8
# Loop through clusters
for (clust in c("1","2", "5")) {
  # Isolate RNA expression and tissue type
  dat <- t(as.data.frame(scSeurat@assays$SCT@data[genes,
                                                  scSeurat$integrated_snn_res.0.4 == clust]))
  tissue_type <- as.data.frame(scSeurat$tissue_type[scSeurat$integrated_snn_res.0.4 == clust])
  colnames(tissue_type) <- "tissue_type"
  dat <- cbind(dat, tissue_type)
  # Replace specific gene names
  colnames(dat) <- gsub("CCL3L1;CCL3L3;CCL3;CCL18", "CCL3", colnames(dat))
  colnames(dat) <- gsub("CCL4L2;CCL4L1;CCL4", "CCL4", colnames(dat))
  # Find average values across tissue types
  sumDat <- dat %>% group_by(tissue_type) %>% summarise_each(funs = mean)
  sumDat <- melt(sumDat, value.name = "expression")
  # Create heatmap with ggplot
  plot <- ggplot(sumDat, aes(x = variable, y = tissue_type, fill = expression)) + 
    geom_tile() +
    scale_fill_viridis(name = "Avg Expression") +
    ggplot2::theme_minimal() +
    ggplot2::theme(axis.title.x = ggplot2::element_blank(),
                   axis.title.y = ggplot2::element_blank())
  print(plot)
  if (clust == "1") {
    cells <- "myeloid"
  } else if (clust == "2") {
    cells <- "t_cell"
  } else if (clust == "5") {
    cells <- "hepatocyte"
  }
  pdf(paste("./figures/stimulation/downsampled", cells, "key_marker_heatmap.pdf", sep = "_"),
    height = 2, width = 14)
  print(plot)
  dev.off() 
}
Warning: The melt generic in data.table has been passed a tbl_df and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(sumDat). In the next version, this warning will become an error.Using tissue_type as id variables

DotPlot(scSeurat,
        features = genes,
        group.by = "general_cell_labels_clusts",
        split.by = "tissue_type")

        #idents = "CD3+ NK/T cells (2)")

More plots

Cluster 2 looks like it generally has more IL genes expressed. Isolate DE genes for this cluster.

clust1 <- sCVdata_list$res.0.4@DEvsRest$`2`[order(sCVdata_list$res.0.4@DEvsRest$`2`$Wstat,
                                                    decreasing = TRUE), ]
cat(rownames(clust1)[1:50])
PTPRC TOX PRKCH INPP4B mikado.WCK01-AAH20201022-F8-rsc00190G443 ARID5B IKZF3 ARHGAP15 SATB1 DOCK10 TRPS1 RASA2 SAMSN1 NSD3 MBNL1 SH3KBP1 EMB SYTL3 ICOS mikado.WCK01-AAH20201022-F8-rsc00083G981 mikado.WCK01-AAH20201022-F8-rsc00275G164 THEMIS MSI2 SLAMF1 PITPNC1 NXF2;NXF2B;NXF5 SRSF7 IKZF1 RAPGEF6 STAT4 SLC38A1 RAP1A RABGAP1L ZC3HAV1 BCL2 TESPA1 APBB1IP GIMAP7 DHX8 DDX5 UBAC2 HUWE1 CD3E CTLA4 CD44 GIMAP1 RGS1 MTHFD1L RIPOR2 TANK

Visualise these genes in violin plots.

Interpretation: Now I see that IL2 and IL4 are expressed in more than just cluster 2, but it is nearly always in PMAIO. Cluster 8 is definitely where IL6 is expressed. IL7 is a bit more spread out across treatment types, but it’s definitely present in PMAIO in clusters 4, 5, and 11. Cluster 11 is plasma cells, but I’m honestly not sure of 4 and 5 - low signal hepatocytes? IL10 is in clusters 2 and 11 PMAIO. IL12A is a bit more in 4 and 5 PMAIO.

VlnPlot(scSeurat, feature = "IL2", split.by = "tissue_type") # Only in PMAIO cluster 2

VlnPlot(scSeurat, feature = "IL4", split.by = "tissue_type") # Only in PMAIO cluster 2

VlnPlot(scSeurat, feature = "IL6", split.by = "tissue_type") # Stronger in endo and mesem PMAIO

VlnPlot(scSeurat, feature = "IL6-1", split.by = "tissue_type") # No signal

VlnPlot(scSeurat, feature = "IL7", split.by = "tissue_type") # More in PMAIO cluster 4/5

VlnPlot(scSeurat, feature = "IL10", split.by = "tissue_type") # More in PMAIO cluster 2

VlnPlot(scSeurat, feature = "IL12A", split.by = "tissue_type") # A bit more in 1,4,5

VlnPlot(scSeurat, feature = "TGFB1", split.by = "tissue_type") # Pretty even across all

VlnPlot(scSeurat, feature = "TNF", split.by = "tissue_type")

Make Violin plots with ggplot

genes <- c("IL2","IL4","IL6","IL7","IL10","IL12A","TGFB1","TGFB2","TGFB3","TNF","IL18","IL2RA","CCL5","IFNG","LIF","CCL3L1;CCL3L3;CCL3;CCL18","CCL4L2;CCL4L1;CCL4")
for(gene in genes) {
  vln_df = data.frame(gene = scSeurat[["RNA"]]@data[gene,], 
                      Cluster = Idents(scSeurat), 
                      tissue_type = scSeurat$tissue_type)
  plot <- ggplot(vln_df, aes(x = Cluster, y = gene)) + 
    geom_violin(aes(fill = tissue_type), trim=TRUE, scale = "width") +
    ylab(gene) +
    theme_bw()
  print(plot)
  pdf(file = paste("figures/stimulation/downsampled_vlnPlot_split_", gene, ".pdf", sep = ""))
  print(plot) # Need print function because R doesn't autoprint in loops
  dev.off()
}

Looking for more genes

gene <- "IL18"
vln_df = data.frame(gene = scSeurat[["RNA"]]@data[gene,], 
                      Cluster = Idents(scSeurat), 
                      tissue_type = scSeurat$tissue_type)
  plot <- ggplot(vln_df, aes(x = Cluster, y = gene)) + 
    geom_violin(aes(fill = tissue_type), trim=TRUE, scale = "width") +
    ylab(gene) +
    theme_bw()
  print(plot)

Make heatmap with select genes

genes <- c("IL2","IL4","IL6","IL7","IL10","IL12A","TGFB1","TGFB2","TGFB3","TNF","IL18","IL2RA","CCL5","IFNG","LIF","CCL3L1;CCL3L3;CCL3;CCL18","CCL4L2;CCL4L1;CCL4")
DoHeatmap(scSeurat, features = genes, group.by = "integrated_snn_res.0.4",
          size = 3, 
          angle = 90, assay = "RNA", slot = "data") +
  NoLegend() +
  theme(text = element_text(size = 7))

DotPlot(scSeurat,
        assay = "RNA",
        features = genes,
        group.by = "integrated_snn_res.0.4",
        split.by =  "tissue_type")

DotPlot(scSeurat,
        assay = "RNA",
        features = genes,
        group.by = "tissue_type")
Warning: Scaling data with a low number of groups may produce misleading results

DotPlot(scSeurat,
        assay = "RNA",
        features = genes,
        group.by = "integrated_snn_res.0.4")

Perform DE test on T-cells from PMAIO vs unstim T-cells. I see TNF, IL2RA, but I also see hepatocyte genes like ALB-1, STAT3

cat(row.names(de_results)[1:100], sep = " ")
LOC107134468 CCL4L2;CCL4L1;CCL4 mikado.WCK01-AAH20201022-F8-rsc00073G191 MTHFD1L NFKB1 NXF2;NXF2B;NXF5 CCND3 IFNG SATB1 SKAP1 ARID5B mikado.WCK01-AAH20201022-F8-rsc00334G1 CCL3L1;CCL3L3;CCL3;CCL18 SLAMF1 CD200 GIMAP7 LOC114086011-6 GBP7;GBP4 CBLB TRAF3IP3 NR4A3 ALB-1 TNFRSF9 SLC25A26 SYNE1 STAT3 UTRN HUWE1 PDE7A IL2RA PTPRCAP APOA1 TNRC6B Ifi214;Ifi209 ETS1 ANKRD44 MAPK6 PDE3B RESF1 CD27 mikado.WCK01-AAH20201022-F8-rsc00138G153 PICALM JARID2 MDN1 CHIC1 CCL3L1;CCL3L3;CCL3;CCL18-2 CKLF;CKLF-CMTM1 HECA FOXN3 MED13L SEC23B ZEB2 AMN1 CD3G SEC14L1 BATF LNPEP IRF4 ALB LOC107134769-1 IQGAP2 LOC114086011-12 SERPINA1 mikado.WCK01-AAH20201022-F8-rsc00234G885 TMEM156 STK4 ATP8A1 PECAM1 FAM13A MTHFD2 CELF2 SAMSN1 NUCB2 GIMAP1 SND1 VMP1 MLLT3 ASAP1 RBP4 TNF CRTAM FYN ACTB mikado.WCK01-AAH20201022-F8-rsc00190G443 PPP3CC HBS1L TTC27 B4GALT5 DDX5 ARHGDIB LAT CXCL2;CXCL3;CXCL1-1 ITM2B SENP7 DOCK8 RIPOR2 APBB1IP TRAF3 SAMHD1 CD99

Volcano plots

Comparing stim vs unstim for some cell populations and create volcano plot

for (clust in levels(as.factor(Idents(scSeurat)))){
  # Read in DE genes
  markers <- read.table(file = paste("./figures/stimulation/downsampled_markers_cluster",
                                   clust ,"_stim_vs_unstim.tsv", sep = ""),
                      header = TRUE)
  markers$gene <- row.names(markers)
  plot <- ggplot(data = markers, aes(x = avg_log2FC, y=-log10(p_val_adj), label = gene)) +
          geom_point() + 
          theme_minimal() +
          geom_text_repel(max.overlaps = 15) +
          scale_color_manual(values=c("blue", "black", "red")) +
          geom_vline(xintercept=c(-0.6, 0.6), col="red") +
          geom_hline(yintercept=-log10(0.05), col="red")
  print(plot)
  pdf(paste("figures/stimulation/volcano_stim_vs_unstim_clust", clust, ".pdf", sep = ""),
      height = 8, width = 10)
  plot
  dev.off()
}

LS0tCnRpdGxlOiAiU3RpbXVsYXRpb24gZXhwZXJpbWVudHMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCkFuYWx5c2lzIG9mIHN0aW11bGF0aW9uIGV4cGVyaW1lbnRzLgoKYGBge3J9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc2NDbHVzdFZpeikKbGlicmFyeShTZXVyYXRXcmFwcGVycykKbGlicmFyeShzY0N1c3RvbWl6ZSkKbGlicmFyeShyZXNoYXBlMikKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KGdncmVwZWwpCmBgYAoKTG9hZCBpbnRlZ3JhdGVkIG9iamVjdC4gVGhpcyBvYmplY3QgaGFzIGJlZW4gaW50ZWdyYXRlZCB3aXRoIENDQSwgYmVjYXVzZSB0aGVyZSB3YXMgbG90cyBvZiBiYXRjaCBlZmZlY3QgYmV0d2VlbiB0aGUgMGhyIHRpc3N1ZSBhbmQgdGhlIG90aGVyIHR3byBleHBlcmltZW50cyAod2hpY2ggbWVyZ2VkIHF1aXRlIHdlbGwpLgoKYGBge3J9CmxvYWQoIn4vRHJvcGJveC9ab2Uvc2NmX3ZlcnNpb24vYW5hbHlzaXMvaGVhbHRoeV9zYy9zZXVyYXRfb2JqZWN0cy9ub19kcm9wbGV0UUMvMzM5MS9pbnRlZ3JhdGVkXzMzOTFfc3RpbXVsYXRpb25fcG1haW9fdW5zdGltX2Rvd25zYW1wbGVkX2NjYV9rYW5jaG9yNV9zY0NsdXN0Vml6LlJEYXRhIikKIyBTZXQgaWRlbnRpdHkKSWRlbnRzKHNjU2V1cmF0KSA8LSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuNCIKYGBgCgojIyBVTUFQcwoKQ2hlY2sgb3V0IHRoZSBVTUFQIG9mIGNsdXN0ZXJzLCBvcmlnaW5hbCBpZGVudGl0aWVzLCBhbmQgcmVmaW5lZCBTQ0lOQSBsYWJlbHMuCgpgYGB7cn0KRGltUGxvdChzY1NldXJhdCwgbGFiZWwgPSBUUlVFKQpEaW1QbG90KHNjU2V1cmF0LCBncm91cC5ieSA9ICJ0aXNzdWVfdHlwZSIsIGxhYmVsID0gRkFMU0UpCkRpbVBsb3Qoc2NTZXVyYXQsIGdyb3VwLmJ5ID0gInNjaW5hX2xhYmVscyIsIGxhYmVsID0gVFJVRSkgJiBOb0xlZ2VuZCgpCmBgYAoKYGBge3J9CnBkZihmaWxlID0gJy4vZmlndXJlcy9zdGltdWxhdGlvbi9kb3duc2FtcGxlZF9VTUFQLnBkZicpCkRpbVBsb3Qoc2NTZXVyYXQsIGxhYmVsID0gVFJVRSkKZGV2Lm9mZigpCnBkZihmaWxlID0gJy4vZmlndXJlcy9zdGltdWxhdGlvbi9kb3duc2FtcGxlZF90aXNzdWVfdHlwZV9VTUFQLnBkZicsCiAgICBoZWlnaHQgPSA1LCB3aWR0aCA9IDcpCkRpbVBsb3Qoc2NTZXVyYXQsIGdyb3VwLmJ5ID0gInRpc3N1ZV90eXBlIikgKwogIGdndGl0bGUoTlVMTCkKZGV2Lm9mZigpCmBgYAoKQ3JlYXRlIFVNQVAgb2YgZ2VuZXJhbCBjZWxsLXR5cGUgbGFiZWxzCgpgYGB7cn0KcGxvdCA8LSBEaW1QbG90KHNjU2V1cmF0LCBncm91cC5ieSA9ICJnZW5lcmFsX2NlbGxfbGFiZWxzX2NsdXN0cyIsIGxhYmVsID0gVFJVRSwgcmVwZWwgPSBUUlVFKSArCiAgbGFicyh0aXRsZSA9IE5VTEwpICYgTm9MZWdlbmQoKQpwbG90CnBkZigiLi9maWd1cmVzL3N0aW11bGF0aW9uL2Rvd25zYW1wbGVkX2dlbmVyYWxfY2VsbF90eXBlX1VNQVAucGRmIiwKICAgIGhlaWdodCA9IDUsIHdpZHRoID0gNykKcGxvdApkZXYub2ZmKCkKYGBgCgojIyBCYXJwbG90IG9mIHRpc3N1ZSB0eXBlCgpMb29rIGF0IHRpc3N1ZS10eXBlIHBlciBjbHVzdGVyIG9uIGEgcHJvcG9ydGlvbmFsIGxldmVsOgoKYGBge3J9CnB0IDwtIHRhYmxlKHNjU2V1cmF0JGdlbmVyYWxfY2VsbF9sYWJlbHNfY2x1c3RzLCBzY1NldXJhdCR0aXNzdWVfdHlwZSkKcHQgPC0gYXMuZGF0YS5mcmFtZShwdCkKcGxvdCA8LSBnZ3Bsb3QocHQsIGFlcyh4ID0gVmFyMSwgeSA9IEZyZXEsIGZpbGwgPSBWYXIyKSkgKwogIHRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE1KSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZmlsbCIsIHdpZHRoID0gMC41KSArCiAgeGxhYigiQ2x1c3RlciIpICsKICB5bGFiKCJQcm9wb3J0aW9uIikgKwogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikKI3ByaW50KHBsb3QsIHZwID0gdmlld3BvcnQoYW5nbGUgPSA5MCkpCnBsb3QgKyBjb29yZF9mbGlwKCkKcGRmKGZpbGUgPSAnLi9maWd1cmVzL3N0aW11bGF0aW9uL2Rvd25zYW1wbGVkX3Rpc3N1ZV90eXBlX2JhcnBsb3QucGRmJywKICAgIGhlaWdodCA9IDUsIHdpZHRoID0gNykKcGxvdCArIGNvb3JkX2ZsaXAoKQpkZXYub2ZmKCkKYGBgCgojIyBERSBnZW5lIHRlc3RpbmcKCkNhbGN1bGF0ZSBhbGwgREUgZ2VuZXMKCmBgYHtyfQphbGwubWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhzY1NldXJhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seS5wb3MgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ucGN0ID0gMC4yNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZjLnRocmVzaG9sZCA9IDAuMjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29ycmVjdF91bWkgPSBGQUxTRSkKdG9wLm1hcmtlcnMgPC0gYWxsLm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSB0b3BfbihuID0gMTAsIHd0ID0gYXZnX2xvZzJGQykKdG9wLm1hcmtlcnMKd3JpdGUudGFibGUoYWxsLm1hcmtlcnMsCiAgICAgICAgICAgIGZpbGUgPSAiLi9maWd1cmVzL3N0aW11bGF0aW9uL2Rvd25zYW1wbGVkX2NsdXN0ZXJfbWFya2Vycy50c3YiLAogICAgICAgICAgICBzZXAgPSAiXHQiLAogICAgICAgICAgICBxdW90ZSA9IEZBTFNFLAogICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSkKYGBgCgpDYWxjdWxhdGUgREUgZ2VuZXM6IGZvciBlYWNoIGNsdXN0ZXIsIGNvbXBhcmUgc3RpbSBWUyB1bnN0aW0KCmBgYHtyfQpmb3IgKGNsdXN0IGluIGxldmVscyhhcy5mYWN0b3IoSWRlbnRzKHNjU2V1cmF0KSkpKSB7CiAgY2VsbHNfc3RpbSA8LSBjb2xuYW1lcyhzY1NldXJhdClbSWRlbnRzKHNjU2V1cmF0KSA9PSBjbHVzdCAmIHNjU2V1cmF0JHRpc3N1ZV90eXBlID09ICI2aHJzX1BNQUlPIl0KICBjZWxsc191bnN0aW0gPC0gY29sbmFtZXMoc2NTZXVyYXQpW0lkZW50cyhzY1NldXJhdCkgPT0gY2x1c3QgJiBzY1NldXJhdCR0aXNzdWVfdHlwZSA9PSAiNmhyc191bnN0aW0iXQogIG1hcmtlcnMgPC0gUnVuUHJlc3RvKHNjU2V1cmF0LAogICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjEgPSBjZWxsc19zdGltLAogICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjIgPSBjZWxsc191bnN0aW0sCiAgICAgICAgICAgICAgICAgICAgICAgb25seS5wb3MgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICBtaW4ucGN0ID0gMC4yNSwKICAgICAgICAgICAgICAgICAgICAgICBsb2dmYy50aHJlc2hvbGQgPSAwLjI1LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29ycmVjdF91bWkgPSBGQUxTRSkKICB3cml0ZS50YWJsZShtYXJrZXJzLAogICAgICAgICAgICAgIGZpbGUgPSBwYXN0ZSgiLi9maWd1cmVzL3N0aW11bGF0aW9uL2Rvd25zYW1wbGVkX21hcmtlcnNfY2x1c3RlciIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdCAsIl9zdGltX3ZzX3Vuc3RpbS50c3YiLCBzZXAgPSAiIiksCiAgICAgICAgICAgICAgc2VwID0gIlx0IiwKICAgICAgICAgICAgICBxdW90ZSA9IEZBTFNFLAogICAgICAgICAgICAgIHJvdy5uYW1lcyA9IFRSVUUpCn0KYGBgCgojIyBHZXQgcmFua2VkIGdlbmUgbGlzdHMKCkdldCByYW5rZWQgZ2VuZSBsaXN0cyBmb3IgR1NFQSAoVCBjZWxscykKCmBgYHtyfQpjZWxsc19zdGltIDwtIGNvbG5hbWVzKHNjU2V1cmF0KVsoSWRlbnRzKHNjU2V1cmF0KSA9PSAyIHwgSWRlbnRzKHNjU2V1cmF0KSA9PSA2KSAmIHNjU2V1cmF0JHRpc3N1ZV90eXBlID09ICI2aHJzX1BNQUlPIl0KY2VsbHNfdW5zdGltIDwtIGNvbG5hbWVzKHNjU2V1cmF0KVsoSWRlbnRzKHNjU2V1cmF0KSA9PSAyIHwgSWRlbnRzKHNjU2V1cmF0KSA9PSA2KSAmIHNjU2V1cmF0JHRpc3N1ZV90eXBlID09ICI2aHJzX3Vuc3RpbSJdCm1hcmtlcnMgPC0gUnVuUHJlc3RvKHNjU2V1cmF0LAogICAgICAgICAgICAgICAgICAgICBpZGVudC4xID0gY2VsbHNfc3RpbSwKICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMiA9IGNlbGxzX3Vuc3RpbSwKICAgICAgICAgICAgICAgICAgICAgb25seS5wb3MgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgbWluLnBjdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ZjLnRocmVzaG9sZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgIHJlY29ycmVjdF91bWkgPSBGQUxTRSkKIyBTb3J0IGJ5IGF2Z19sb2cyRkMKbWFya2VycyA8LSBtYXJrZXJzW29yZGVyKC1tYXJrZXJzJGF2Z19sb2cyRkMpLF0KIyBPbmx5IGtlZXAgZ2VuZSBuYW1lcyBhbmQgYXZnX2xvZzJGQwpnZW5lIDwtIHJvdy5uYW1lcyhtYXJrZXJzKQphdmdfbG9nMkZDIDwtIG1hcmtlcnNbLCdhdmdfbG9nMkZDJ10KbWFya2VycyA8LSBjYmluZChnZW5lLCBhdmdfbG9nMkZDKQpoZWFkKG1hcmtlcnMpCndyaXRlLnRhYmxlKG1hcmtlcnMsCiAgICAgICAgICAgIGZpbGUgPSAiLi9maWd1cmVzL3N0aW11bGF0aW9uL3RjZWxsc19zdGltX3ZzX3Vuc3RpbS5ybmsiLAogICAgICAgICAgICBzZXAgPSAiXHQiLAogICAgICAgICAgICBxdW90ZSA9IEZBTFNFLAogICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSwKICAgICAgICAgICAgY29sLm5hbWVzID0gVFJVRSkKYGBgCgpHZXQgcmFua2VkIGdlbmUgbGlzdHMgZm9yIEdTRUEgKE15ZWxvaWQpCgpgYGB7cn0KY2VsbHNfc3RpbSA8LSBjb2xuYW1lcyhzY1NldXJhdClbSWRlbnRzKHNjU2V1cmF0KSA9PSAxICYgc2NTZXVyYXQkdGlzc3VlX3R5cGUgPT0gIjZocnNfUE1BSU8iXQpjZWxsc191bnN0aW0gPC0gY29sbmFtZXMoc2NTZXVyYXQpW0lkZW50cyhzY1NldXJhdCkgPT0gMSAmIHNjU2V1cmF0JHRpc3N1ZV90eXBlID09ICI2aHJzX3Vuc3RpbSJdCm1hcmtlcnMgPC0gUnVuUHJlc3RvKHNjU2V1cmF0LAogICAgICAgICAgICAgICAgICAgICBpZGVudC4xID0gY2VsbHNfc3RpbSwKICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMiA9IGNlbGxzX3Vuc3RpbSwKICAgICAgICAgICAgICAgICAgICAgb25seS5wb3MgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgbWluLnBjdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ZjLnRocmVzaG9sZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgIHJlY29ycmVjdF91bWkgPSBGQUxTRSkKIyBTb3J0IGJ5IGF2Z19sb2cyRkMKbWFya2VycyA8LSBtYXJrZXJzW29yZGVyKC1tYXJrZXJzJGF2Z19sb2cyRkMpLF0KIyBPbmx5IGtlZXAgZ2VuZSBuYW1lcyBhbmQgYXZnX2xvZzJGQwpnZW5lIDwtIHJvdy5uYW1lcyhtYXJrZXJzKQphdmdfbG9nMkZDIDwtIG1hcmtlcnNbLCdhdmdfbG9nMkZDJ10KbWFya2VycyA8LSBjYmluZChnZW5lLCBhdmdfbG9nMkZDKQpoZWFkKG1hcmtlcnMpCndyaXRlLnRhYmxlKG1hcmtlcnMsCiAgICAgICAgICAgIGZpbGUgPSAiLi9maWd1cmVzL3N0aW11bGF0aW9uL215ZWxvaWRfc3RpbV92c191bnN0aW0ucm5rIiwKICAgICAgICAgICAgc2VwID0gIlx0IiwKICAgICAgICAgICAgcXVvdGUgPSBGQUxTRSwKICAgICAgICAgICAgcm93Lm5hbWVzID0gRkFMU0UsCiAgICAgICAgICAgIGNvbC5uYW1lcyA9IFRSVUUpCmBgYAoKR2V0IHJhbmtlZCBnZW5lIGxpc3RzIGZvciBHU0VBIChNeWVsb2lkIFZTIE1hY3MpCgpgYGB7cn0KRGltUGxvdChzY1NldXJhdCwgZ3JvdXAuYnkgPSAiZ2VuZXJhbF9jZWxsX2xhYmVscyIsIGxhYmVsID0gVFJVRSkgJiBOb0xlZ2VuZCgpCkRpbVBsb3Qoc2NTZXVyYXQsIGdyb3VwLmJ5ID0gImludGVncmF0ZWRfc25uX3Jlcy4wLjYiLCBsYWJlbCA9IFRSVUUpICYgTm9MZWdlbmQoKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSAiTUFSQ08iKQojIElzb2xhdGUgbWFjcwptYWNzIDwtIGNvbG5hbWVzKHNjU2V1cmF0KVtzY1NldXJhdCRnZW5lcmFsX2NlbGxfbGFiZWxzID09ICJNeWVsb2lkIiAmIChzY1NldXJhdCRpbnRlZ3JhdGVkX3Nubl9yZXMuMC42ID09IDUgfCBzY1NldXJhdCRpbnRlZ3JhdGVkX3Nubl9yZXMuMC42ID09IDE1KV0KbW9ub3MgPC0gY29sbmFtZXMoc2NTZXVyYXQpW3NjU2V1cmF0JGdlbmVyYWxfY2VsbF9sYWJlbHMgPT0gIk15ZWxvaWQiICYgKHNjU2V1cmF0JGludGVncmF0ZWRfc25uX3Jlcy4wLjYgIT0gNSAmIHNjU2V1cmF0JGludGVncmF0ZWRfc25uX3Jlcy4wLjYgIT0gMTUpXQojIEZpbmQgbWFya2VycwptYXJrZXJzIDwtIFJ1blByZXN0byhzY1NldXJhdCwKICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMSA9IG1vbm9zLAogICAgICAgICAgICAgICAgICAgICBpZGVudC4yID0gbWFjcywKICAgICAgICAgICAgICAgICAgICAgb25seS5wb3MgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgbWluLnBjdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgIGxvZ2ZjLnRocmVzaG9sZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgIHJlY29ycmVjdF91bWkgPSBGQUxTRSkKIyBTb3J0IGJ5IGF2Z19sb2cyRkMKbWFya2VycyA8LSBtYXJrZXJzW29yZGVyKC1tYXJrZXJzJGF2Z19sb2cyRkMpLF0KIyBPbmx5IGtlZXAgZ2VuZSBuYW1lcyBhbmQgYXZnX2xvZzJGQwpnZW5lIDwtIHJvdy5uYW1lcyhtYXJrZXJzKQphdmdfbG9nMkZDIDwtIG1hcmtlcnNbLCdhdmdfbG9nMkZDJ10KbWFya2VycyA8LSBjYmluZChnZW5lLCBhdmdfbG9nMkZDKQpoZWFkKG1hcmtlcnMpCndyaXRlLnRhYmxlKG1hcmtlcnMsCiAgICAgICAgICAgIGZpbGUgPSAiLi9maWd1cmVzL3N0aW11bGF0aW9uL21vbm9zX3ZzX21hY3Mucm5rIiwKICAgICAgICAgICAgc2VwID0gIlx0IiwKICAgICAgICAgICAgcXVvdGUgPSBGQUxTRSwKICAgICAgICAgICAgcm93Lm5hbWVzID0gRkFMU0UsCiAgICAgICAgICAgIGNvbC5uYW1lcyA9IFRSVUUpCmBgYAoKIyMgRmVhdHVyZSB2aXN1YWxpemF0aW9uCgpMb29rIGZvciBULWNlbGwgc2lnbmF0dXJlcy4KCmBgYHtyfQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJDRDNFIiwgIk5LRzciKSkKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiTEVGMSIsICJYQ0wxO1hDTDIiKSkKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiVE9YIiwgIkNEOEEiKSkKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiQ0NSNyIpKQpgYGAKCkxvb2sgZm9yIFRoMSBhbmQgVGgyIHNpZ25hdHVyZXMKVGgxOiBDRDQsIFNUQVQ0LCBUYmV0LCBUbmZiLCBpZm5nClRoMjogQ0Q0LCBHQVRBMywgU1RBVDYsIElMIDQvNS82LzEwLzEzCgpgYGB7cn0KRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiQ0Q0IiwgIlNUQVQ0IikpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIkdBVEEzIiwgIlNUQVQ2IikpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIklMNCIsICJJTDUiKSkKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiSUw2IiwgIklMMTAiKSkKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiSUwxMyIpKQpgYGAKCgpMb29rIGZvciBtYWNyb3BoYWdlIHNpZ25hdHVyZXM6CgpgYGB7cn0KRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiTEdBTFMxIiwgIlRZUk9CUCIpKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJNQVJDTyIsICJDMVFDIikpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIkxZWi0xIiwgIlMxMDBBOCIpKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJERUZBNjtERUZBNDtERUZBNSIsICJDVFNTIikpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIkZMVDMiLCAiUzEwMEExMiIpKQpgYGAKCkxvb2sgZm9yIEIgYW5kIHBsYXNtYSBjZWxsIHNpZ25hdHVyZXMKCmBgYHtyfQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJDRDc5QiIsICJKQ0hBSU4iKSkKYGBgCgoKQ2x1c3RlciAxMiBpcyB0aGUgb25seSBjbHVzdGVyIHRoYXQgaXMgb2J2aW91c2x5IGRvbWluYXRlZCBieSB0aGUgdW5zdGltdWxhdGVkIGV4cGVyaW1lbnRzLiBXaGF0IGNlbGxzIGFyZSB0aGVzZT8gTG9va3MgbGlrZSB0aGV5IGFyZSBoZXBhdG9jeXRlcy4gQSBsb3Qgb2YgdGhlIG1hcmtlcnMgYXJlIHBlcmlwb3J0YWwsIGJ1dCBhbGwgaGVwYXRvY3l0ZXMgYXJlIGluIHRoaXMgY2x1c3Rlci4KCmBgYHtyfQojIElzb2xhdGUgREUgZ2VuZXMKY2x1c3QxMSA8LSBzQ1ZkYXRhX2xpc3QkcmVzLjAuNEBERXZzUmVzdCRgMTJgW29yZGVyKHNDVmRhdGFfbGlzdCRyZXMuMC40QERFdnNSZXN0JGAxMmAkV3N0YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nID0gVFJVRSksIF0Kcm93bmFtZXMoY2x1c3QxMSlbMTo1MF0KRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiUEFIIiwiUENLMSIpKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJDWVAyRTEiLCJGRVRVQiIpKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJBQ0FDQiIsIkVMT1ZMNiIpKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZXMgPSBjKCJQT0xSMkQiLCAiQUxCLTEiKSkKYGBgCgpMZXQncyBsb29rIGF0IHNvbWUgb2YgdGhlIGtleSBtYXJrZXJzIHRoYXQgU29ueWEgc2VudDogSUwyLCBJTDQsIElMNiwgSUw3LCBJTDEwLCBJTDEyQSwgVEdGQgoKYGBge3J9CkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIklMMiIsICJJTDQiKSkKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmVzID0gYygiSUw2IiwgIklMNi0xIikpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIklMNyIsICJJTDEwIikpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlcyA9IGMoIklMMTJBIiwgIlRHRkIxIikpCmBgYAoKSXQncyBwcmV0dHkgaGFyZCB0byBzZWUgd2hpY2ggY3l0b2tpbmVzIGFyZSBleHByZXNzZWQgaW4gd2hpY2ggc2FtcGxlcywgc28gSSdtIGdvaW5nIHRvIHRyeSBzcGxpdHRpbmcgdXAgdGhlIHNhbXBsZXMuCgpgYGB7cn0KRGltUGxvdChzY1NldXJhdCwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiLCBsYWJlbCA9IFRSVUUpICYgTm9MZWdlbmQoKQpwZGYoZmlsZSA9ICcuL2ZpZ3VyZXMvc3RpbXVsYXRpb24vZG93bnNhbXBsZWRfVU1BUF9zcGxpdC5wZGYnLAogICAgaGVpZ2h0ID0gNCwgd2lkdGggPSA4KQpEaW1QbG90KHNjU2V1cmF0LCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIsIGxhYmVsID0gVFJVRSkgJiBOb0xlZ2VuZCgpCmRldi5vZmYoKQpgYGAKCk5vdyBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZmVhdHVyZXMgb24gdGhpcyBzcGxpdCBwbG90LgoKYGBge3J9CmdlbmVzIDwtIGMoIklMMiIsIklMNCIsIklMNiIsIklMNyIsIklMMTAiLCJJTDEyQSIsIlRHRkIxIiwiVEdGQjIiLCJUR0ZCMyIsIlRORiIsIklMMTgiLCJJTDJSQSIsIkNDTDUiLCJJRk5HIiwiTElGIiwgIkNDTDNMMTtDQ0wzTDM7Q0NMMztDQ0wxOCIsIkNDTDRMMjtDQ0w0TDE7Q0NMNCIsIk5GS0IxIiwiQUNUQiIsIlBUUFJDIiwiQ0QzRSIsIlRCUCIsIlNESEEiKQpmb3IgKGdlbmUgaW4gZ2VuZXMpIHsKICBwbG90cyA8LSBGZWF0dXJlUGxvdF9zY0N1c3RvbShzY1NldXJhdCwgZmVhdHVyZSA9IGdlbmUsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIiwKICAgICAgICAgICAgICAgICAgICAgY29sb3JzX3VzZSA9IHZpcmlkaXNfbGlnaHRfaGlnaCkKICBwbG90MSA8LSBwbG90c1tbMl1dICsgTm9MZWdlbmQoKSArIGxhYnModGl0bGUgPSBOVUxMKQogIHBsb3QyIDwtIHBsb3RzW1sxXV0gKyB0aGVtZShheGlzLmxpbmUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgICBsYWJzKHRpdGxlID0gTlVMTCkKICBpZiAoZ2VuZSA9PSAiQ0NMM0wxO0NDTDNMMztDQ0wzO0NDTDE4IiB8IGdlbmUgPT0gIkNDTDRMMjtDQ0w0TDE7Q0NMNCIpIHsKICAgIHBsb3QyIDwtIHBsb3QyICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKQogIH0KICBwcmludChwbG90MSArIHBsb3QyKQogICNwZGYocGFzdGUoImZpZ3VyZXMvc3RpbXVsYXRpb24vZG93bnNhbXBsZWRfVU1BUF9zcGxpdF8iLCBnZW5lLCAiLnBkZiIsIHNlcCA9ICIiKSwKICAjICAgIGhlaWdodCA9IDQsIHdpZHRoID0gOCkKICAjcHJpbnQocGxvdDEgKyBwbG90MikKICAjZGV2Lm9mZigpCn0KYGBgCgojIyBTdGltIHZzIHVuc3RpbSBoZWF0bWFwCgpMb29rIGF0IHRoZSBzYW1lIGZlYXR1cmVzIG9uIGEgaGVhdG1hcDoKCmBgYHtyfQojIE1ha2Ugb3JkZXJlZCBsaXN0IG9mIGdlbmVzIHRvIHZpc3VhbGlzZQpnZW5lcyA8LSBjKCJESFg4IiwiSk1KRDFDIiwiRVJCSU4iLCJUQ0YxMiIsIkhOUk5QQTJCMSIsIk5GS0IxIiwiQ0NMM0wxO0NDTDNMMztDQ0wzO0NDTDE4IiwiQ0NMNEwyO0NDTDRMMTtDQ0w0IiwiQ0NMNSIsCiAgICAgICAgICAgIlRORiIsIklGTkciLCJJTDJSQSIsIklMMiIsIklMNCIsIklMNiIsIklMNyIsIklMMTAiKQojIExvb2tlZCBmb3IgZ2VuZXMgd2l0aCBoaWdoIGV4cHJlc3Npb246CiMgc29ydChhcHBseShzY1NldXJhdEBhc3NheXMkUk5BQGNvdW50cywgMSwgc3VtKSwgZGVjcmVhc2luZyA9IFRSVUUpWzE6NTBdCiMgT3RoZXIgcG9zc2libGUgaG91c2VrZWVwaW5nIGdlbmVzOiBTcHRzc2EsIENISUMxLCBGTklQMSAoPyksIEREWDUsIFpGQU5EMywgSE5STlBBMkIxLCBKTUpEMUMsIEVSQklOCiMgVENGMTIsIERIWDgKIyBMb29wIHRocm91Z2ggY2x1c3RlcnMKZm9yIChjbHVzdCBpbiBjKCIxIiwiMiIsICI1IikpIHsKICAjIElzb2xhdGUgUk5BIGV4cHJlc3Npb24gYW5kIHRpc3N1ZSB0eXBlCiAgZGF0IDwtIHQoYXMuZGF0YS5mcmFtZShzY1NldXJhdEBhc3NheXMkU0NUQGRhdGFbZ2VuZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NTZXVyYXQkaW50ZWdyYXRlZF9zbm5fcmVzLjAuNCA9PSBjbHVzdF0pKQogIHRpc3N1ZV90eXBlIDwtIGFzLmRhdGEuZnJhbWUoc2NTZXVyYXQkdGlzc3VlX3R5cGVbc2NTZXVyYXQkaW50ZWdyYXRlZF9zbm5fcmVzLjAuNCA9PSBjbHVzdF0pCiAgY29sbmFtZXModGlzc3VlX3R5cGUpIDwtICJ0aXNzdWVfdHlwZSIKICBkYXQgPC0gY2JpbmQoZGF0LCB0aXNzdWVfdHlwZSkKICAjIFJlcGxhY2Ugc3BlY2lmaWMgZ2VuZSBuYW1lcwogIGNvbG5hbWVzKGRhdCkgPC0gZ3N1YigiQ0NMM0wxO0NDTDNMMztDQ0wzO0NDTDE4IiwgIkNDTDMiLCBjb2xuYW1lcyhkYXQpKQogIGNvbG5hbWVzKGRhdCkgPC0gZ3N1YigiQ0NMNEwyO0NDTDRMMTtDQ0w0IiwgIkNDTDQiLCBjb2xuYW1lcyhkYXQpKQogICMgRmluZCBhdmVyYWdlIHZhbHVlcyBhY3Jvc3MgdGlzc3VlIHR5cGVzCiAgc3VtRGF0IDwtIGRhdCAlPiUgZ3JvdXBfYnkodGlzc3VlX3R5cGUpICU+JSBzdW1tYXJpc2VfZWFjaChmdW5zID0gbWVhbikKICBzdW1EYXQgPC0gbWVsdChzdW1EYXQsIHZhbHVlLm5hbWUgPSAiZXhwcmVzc2lvbiIpCiAgIyBDcmVhdGUgaGVhdG1hcCB3aXRoIGdncGxvdAogIHBsb3QgPC0gZ2dwbG90KHN1bURhdCwgYWVzKHggPSB2YXJpYWJsZSwgeSA9IHRpc3N1ZV90eXBlLCBmaWxsID0gZXhwcmVzc2lvbikpICsgCiAgICBnZW9tX3RpbGUoKSArCiAgICBzY2FsZV9maWxsX3ZpcmlkaXMobmFtZSA9ICJBdmcgRXhwcmVzc2lvbiIpICsKICAgIGdncGxvdDI6OnRoZW1lX21pbmltYWwoKSArCiAgICBnZ3Bsb3QyOjp0aGVtZShheGlzLnRpdGxlLnggPSBnZ3Bsb3QyOjplbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICBheGlzLnRpdGxlLnkgPSBnZ3Bsb3QyOjplbGVtZW50X2JsYW5rKCkpCiAgcHJpbnQocGxvdCkKICBpZiAoY2x1c3QgPT0gIjEiKSB7CiAgICBjZWxscyA8LSAibXllbG9pZCIKICB9IGVsc2UgaWYgKGNsdXN0ID09ICIyIikgewogICAgY2VsbHMgPC0gInRfY2VsbCIKICB9IGVsc2UgaWYgKGNsdXN0ID09ICI1IikgewogICAgY2VsbHMgPC0gImhlcGF0b2N5dGUiCiAgfQogIHBkZihwYXN0ZSgiLi9maWd1cmVzL3N0aW11bGF0aW9uL2Rvd25zYW1wbGVkIiwgY2VsbHMsICJrZXlfbWFya2VyX2hlYXRtYXAucGRmIiwgc2VwID0gIl8iKSwKICAgIGhlaWdodCA9IDIsIHdpZHRoID0gMTQpCiAgcHJpbnQocGxvdCkKICBkZXYub2ZmKCkgCn0KYGBgCgpgYGB7cn0KRG90UGxvdChzY1NldXJhdCwKICAgICAgICBmZWF0dXJlcyA9IGdlbmVzLAogICAgICAgIGdyb3VwLmJ5ID0gImdlbmVyYWxfY2VsbF9sYWJlbHNfY2x1c3RzIiwKICAgICAgICBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCiAgICAgICAgI2lkZW50cyA9ICJDRDMrIE5LL1QgY2VsbHMgKDIpIikKYGBgCgoKCk1vcmUgcGxvdHMKCmBgYHtyfQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDE1Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDE2Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDE3QiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw2U1QiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMMzFSQSIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw3UiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw3Ui0xIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDE3RCIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw1UkEiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpIApGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDE3UkUiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpIApGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDE3UkMiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMMTdDIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDM0Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDRJMSIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUwxMSIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw5UiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw0UiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUwyMVIiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMMjciLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMSyIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUwxOEJQIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDEwUkEiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMMyIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiQ1NGMiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUZOSyIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiSUw5Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDEzIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJPU00iLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIkxJRiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiU1RBVDEiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIlNUQVQ0Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDQiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMNEkxIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJDRDY5Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJUTFI3Iiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJITEEtRFJBIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDEyQSIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiVExSMiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKRmVhdHVyZVBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiTkZLQjEiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIkFDVEIiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIlBUUFJDIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJDRDNFIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpGZWF0dXJlUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJUQlAiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIlNESEEiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpCkZlYXR1cmVQbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIkFMQi0xIiwgc3BsaXQuYnkgPSAidGlzc3VlX3R5cGUiKQpgYGAKCgpDbHVzdGVyIDIgbG9va3MgbGlrZSBpdCBnZW5lcmFsbHkgaGFzIG1vcmUgSUwgZ2VuZXMgZXhwcmVzc2VkLiBJc29sYXRlIERFIGdlbmVzIGZvciB0aGlzIGNsdXN0ZXIuCgpgYGB7cn0KY2x1c3QxIDwtIHNDVmRhdGFfbGlzdCRyZXMuMC40QERFdnNSZXN0JGAyYFtvcmRlcihzQ1ZkYXRhX2xpc3QkcmVzLjAuNEBERXZzUmVzdCRgMmAkV3N0YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nID0gVFJVRSksIF0KY2F0KHJvd25hbWVzKGNsdXN0MSlbMTo1MF0pCmBgYAoKVmlzdWFsaXNlIHRoZXNlIGdlbmVzIGluIHZpb2xpbiBwbG90cy4KCioqSW50ZXJwcmV0YXRpb24qKjogTm93IEkgc2VlIHRoYXQgSUwyIGFuZCBJTDQgYXJlIGV4cHJlc3NlZCBpbiBtb3JlIHRoYW4ganVzdCBjbHVzdGVyIDIsIGJ1dCBpdCBpcyBuZWFybHkgYWx3YXlzIGluIFBNQUlPLiBDbHVzdGVyIDggaXMgZGVmaW5pdGVseSB3aGVyZSBJTDYgaXMgZXhwcmVzc2VkLiBJTDcgaXMgYSBiaXQgbW9yZSBzcHJlYWQgb3V0IGFjcm9zcyB0cmVhdG1lbnQgdHlwZXMsIGJ1dCBpdCdzIGRlZmluaXRlbHkgcHJlc2VudCBpbiBQTUFJTyBpbiBjbHVzdGVycyA0LCA1LCBhbmQgMTEuIENsdXN0ZXIgMTEgaXMgcGxhc21hIGNlbGxzLCBidXQgSSdtIGhvbmVzdGx5IG5vdCBzdXJlIG9mIDQgYW5kIDUgLSBsb3cgc2lnbmFsIGhlcGF0b2N5dGVzPyBJTDEwIGlzIGluIGNsdXN0ZXJzIDIgYW5kIDExIFBNQUlPLiBJTDEyQSBpcyBhIGJpdCBtb3JlIGluIDQgYW5kIDUgUE1BSU8uCgpgYGB7cn0KVmxuUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDIiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpICMgT25seSBpbiBQTUFJTyBjbHVzdGVyIDIKVmxuUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDQiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpICMgT25seSBpbiBQTUFJTyBjbHVzdGVyIDIKVmxuUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDYiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpICMgU3Ryb25nZXIgaW4gZW5kbyBhbmQgbWVzZW0gUE1BSU8KVmxuUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDYtMSIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikgIyBObyBzaWduYWwKVmxuUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDciLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpICMgTW9yZSBpbiBQTUFJTyBjbHVzdGVyIDQvNQpWbG5QbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIklMMTAiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpICMgTW9yZSBpbiBQTUFJTyBjbHVzdGVyIDIKVmxuUGxvdChzY1NldXJhdCwgZmVhdHVyZSA9ICJJTDEyQSIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikgIyBBIGJpdCBtb3JlIGluIDEsNCw1ClZsblBsb3Qoc2NTZXVyYXQsIGZlYXR1cmUgPSAiVEdGQjEiLCBzcGxpdC5ieSA9ICJ0aXNzdWVfdHlwZSIpICMgUHJldHR5IGV2ZW4gYWNyb3NzIGFsbApWbG5QbG90KHNjU2V1cmF0LCBmZWF0dXJlID0gIlRORiIsIHNwbGl0LmJ5ID0gInRpc3N1ZV90eXBlIikKYGBgCgpNYWtlIFZpb2xpbiBwbG90cyB3aXRoIGdncGxvdAoKYGBge3J9CmdlbmVzIDwtIGMoIklMMiIsIklMNCIsIklMNiIsIklMNyIsIklMMTAiLCJJTDEyQSIsIlRHRkIxIiwiVEdGQjIiLCJUR0ZCMyIsIlRORiIsIklMMTgiLCJJTDJSQSIsIkNDTDUiLCJJRk5HIiwiTElGIiwiQ0NMM0wxO0NDTDNMMztDQ0wzO0NDTDE4IiwiQ0NMNEwyO0NDTDRMMTtDQ0w0IikKZm9yKGdlbmUgaW4gZ2VuZXMpIHsKICB2bG5fZGYgPSBkYXRhLmZyYW1lKGdlbmUgPSBzY1NldXJhdFtbIlJOQSJdXUBkYXRhW2dlbmUsXSwgCiAgICAgICAgICAgICAgICAgICAgICBDbHVzdGVyID0gSWRlbnRzKHNjU2V1cmF0KSwgCiAgICAgICAgICAgICAgICAgICAgICB0aXNzdWVfdHlwZSA9IHNjU2V1cmF0JHRpc3N1ZV90eXBlKQogIHBsb3QgPC0gZ2dwbG90KHZsbl9kZiwgYWVzKHggPSBDbHVzdGVyLCB5ID0gZ2VuZSkpICsgCiAgICBnZW9tX3Zpb2xpbihhZXMoZmlsbCA9IHRpc3N1ZV90eXBlKSwgdHJpbT1UUlVFLCBzY2FsZSA9ICJ3aWR0aCIpICsKICAgIHlsYWIoZ2VuZSkgKwogICAgdGhlbWVfYncoKQogIHByaW50KHBsb3QpCiAgcGRmKGZpbGUgPSBwYXN0ZSgiZmlndXJlcy9zdGltdWxhdGlvbi9kb3duc2FtcGxlZF92bG5QbG90X3NwbGl0XyIsIGdlbmUsICIucGRmIiwgc2VwID0gIiIpKQogIHByaW50KHBsb3QpICMgTmVlZCBwcmludCBmdW5jdGlvbiBiZWNhdXNlIFIgZG9lc24ndCBhdXRvcHJpbnQgaW4gbG9vcHMKICBkZXYub2ZmKCkKfQpgYGAKCkxvb2tpbmcgZm9yIG1vcmUgZ2VuZXMKCmBgYHtyfQpnZW5lIDwtICJJTDE4Igp2bG5fZGYgPSBkYXRhLmZyYW1lKGdlbmUgPSBzY1NldXJhdFtbIlJOQSJdXUBkYXRhW2dlbmUsXSwgCiAgICAgICAgICAgICAgICAgICAgQ2x1c3RlciA9IElkZW50cyhzY1NldXJhdCksIAogICAgICAgICAgICAgICAgICAgIHRpc3N1ZV90eXBlID0gc2NTZXVyYXQkdGlzc3VlX3R5cGUpCnBsb3QgPC0gZ2dwbG90KHZsbl9kZiwgYWVzKHggPSBDbHVzdGVyLCB5ID0gZ2VuZSkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGwgPSB0aXNzdWVfdHlwZSksIHRyaW09VFJVRSwgc2NhbGUgPSAid2lkdGgiKSArCiAgeWxhYihnZW5lKSArCiAgdGhlbWVfYncoKQpwcmludChwbG90KQpgYGAKCk1ha2UgaGVhdG1hcCB3aXRoIHNlbGVjdCBnZW5lcwoKYGBge3J9CmdlbmVzIDwtIGMoIklMMiIsIklMNCIsIklMNiIsIklMNyIsIklMMTAiLCJJTDEyQSIsIlRHRkIxIiwiVEdGQjIiLCJUR0ZCMyIsIlRORiIsIklMMTgiLCJJTDJSQSIsIkNDTDUiLCJJRk5HIiwiTElGIiwiQ0NMM0wxO0NDTDNMMztDQ0wzO0NDTDE4IiwiQ0NMNEwyO0NDTDRMMTtDQ0w0IikKRG9IZWF0bWFwKHNjU2V1cmF0LCBmZWF0dXJlcyA9IGdlbmVzLCBncm91cC5ieSA9ICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC40IiwKICAgICAgICAgIHNpemUgPSAzLCAKICAgICAgICAgIGFuZ2xlID0gOTAsIGFzc2F5ID0gIlJOQSIsIHNsb3QgPSAiZGF0YSIpICsKICBOb0xlZ2VuZCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA3KSkKRG90UGxvdChzY1NldXJhdCwKICAgICAgICBhc3NheSA9ICJSTkEiLAogICAgICAgIGZlYXR1cmVzID0gZ2VuZXMsCiAgICAgICAgZ3JvdXAuYnkgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuNCIsCiAgICAgICAgc3BsaXQuYnkgPSAgInRpc3N1ZV90eXBlIikKRG90UGxvdChzY1NldXJhdCwKICAgICAgICBhc3NheSA9ICJSTkEiLAogICAgICAgIGZlYXR1cmVzID0gZ2VuZXMsCiAgICAgICAgZ3JvdXAuYnkgPSAidGlzc3VlX3R5cGUiKQpEb3RQbG90KHNjU2V1cmF0LAogICAgICAgIGFzc2F5ID0gIlJOQSIsCiAgICAgICAgZmVhdHVyZXMgPSBnZW5lcywKICAgICAgICBncm91cC5ieSA9ICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC40IikKYGBgCgoKUGVyZm9ybSBERSB0ZXN0IG9uIFQtY2VsbHMgZnJvbSBQTUFJTyB2cyB1bnN0aW0gVC1jZWxscy4gSSBzZWUgKlRORiwgSUwyUkEqLCBidXQgSSBhbHNvIHNlZSBoZXBhdG9jeXRlIGdlbmVzIGxpa2UgKkFMQi0xLCBTVEFUMyoKCmBgYHtyfQojIEZldGNoIGNlbGxzIHRvIGZpbmQgb3V0IHJlbGV2YW50IGNlbGwgYmFyY29kZXMKYmFyY29kZV9kZiA8LSBGZXRjaERhdGEoc2NTZXVyYXQsIHZhcnMgPSBjKCJ0aXNzdWVfdHlwZSIsICJpbnRlZ3JhdGVkX3Nubl9yZXMuMC40IikpCmJhcmNvZGVfZGYkYmFyY29kZSA8LSByb3duYW1lcyhiYXJjb2RlX2RmKQojIEZpbHRlciBvbiBkYXRhIHN1YnNldHMgYW5kIHB1bGwgYmFyY29kZSBuYW1lcwpjZWxsczEgPC0gYmFyY29kZV9kZiAlPiUKICBmaWx0ZXIodGlzc3VlX3R5cGUgPT0gIjZocnNfUE1BSU8iKSAlPiUKICBmaWx0ZXIoaW50ZWdyYXRlZF9zbm5fcmVzLjAuNCAlaW4lIGMoMiw2KSkgJT4lCiAgcHVsbChiYXJjb2RlKQpjZWxsczIgPC0gYmFyY29kZV9kZiAlPiUKICBmaWx0ZXIodGlzc3VlX3R5cGUgPT0gIjZocnNfdW5zdGltIikgJT4lCiAgZmlsdGVyKGludGVncmF0ZWRfc25uX3Jlcy4wLjQgJWluJSBjKDIsNikpICU+JQogIHB1bGwoYmFyY29kZSkKIyBQcmVwIGZvciBERSB0ZXN0aW5nCnNjU2V1cmF0IDwtIFByZXBTQ1RGaW5kTWFya2VycyhzY1NldXJhdCkKIyBQZXJmb3JtIERFIHRlc3QKZGVfcmVzdWx0cyA8LSBGaW5kTWFya2VycyhzY1NldXJhdCwKICAgICAgICAgICAgaWRlbnQuMSA9IGNlbGxzMSwKICAgICAgICAgICAgaWRlbnQuMiA9IGNlbGxzMikKY2F0KHJvdy5uYW1lcyhkZV9yZXN1bHRzKVsxOjEwMF0sIHNlcCA9ICIgIikKYGBgCgojIyBWb2xjYW5vIHBsb3RzCgpDb21wYXJpbmcgc3RpbSB2cyB1bnN0aW0gZm9yIHNvbWUgY2VsbCBwb3B1bGF0aW9ucyBhbmQgY3JlYXRlIHZvbGNhbm8gcGxvdAoKYGBge3J9CmZvciAoY2x1c3QgaW4gbGV2ZWxzKGFzLmZhY3RvcihJZGVudHMoc2NTZXVyYXQpKSkpewogICMgUmVhZCBpbiBERSBnZW5lcwogIG1hcmtlcnMgPC0gcmVhZC50YWJsZShmaWxlID0gcGFzdGUoIi4vZmlndXJlcy9zdGltdWxhdGlvbi9kb3duc2FtcGxlZF9tYXJrZXJzX2NsdXN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ICwiX3N0aW1fdnNfdW5zdGltLnRzdiIsIHNlcCA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpCiAgbWFya2VycyRnZW5lIDwtIHJvdy5uYW1lcyhtYXJrZXJzKQogIHBsb3QgPC0gZ2dwbG90KGRhdGEgPSBtYXJrZXJzLCBhZXMoeCA9IGF2Z19sb2cyRkMsIHk9LWxvZzEwKHBfdmFsX2FkaiksIGxhYmVsID0gZ2VuZSkpICsKICAgICAgICAgIGdlb21fcG9pbnQoKSArIAogICAgICAgICAgdGhlbWVfbWluaW1hbCgpICsKICAgICAgICAgIGdlb21fdGV4dF9yZXBlbChtYXgub3ZlcmxhcHMgPSAxNSkgKwogICAgICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCJibHVlIiwgImJsYWNrIiwgInJlZCIpKSArCiAgICAgICAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9YygtMC42LCAwLjYpLCBjb2w9InJlZCIpICsKICAgICAgICAgIGdlb21faGxpbmUoeWludGVyY2VwdD0tbG9nMTAoMC4wNSksIGNvbD0icmVkIikKICBwcmludChwbG90KQogIHBkZihwYXN0ZSgiZmlndXJlcy9zdGltdWxhdGlvbi92b2xjYW5vX3N0aW1fdnNfdW5zdGltX2NsdXN0IiwgY2x1c3QsICIucGRmIiwgc2VwID0gIiIpLAogICAgICBoZWlnaHQgPSA4LCB3aWR0aCA9IDEwKQogIHByaW50KHBsb3QpCiAgZGV2Lm9mZigpCn0KYGBgCgoK